Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2013, 11:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Регулярка для комментариев /* comment */ , опционально закрытых
Помогите составить регулярку для отлова комментариев типа
/* 
      $foo = 1 + 2; 
      $foo = $foo; 
      print $foo;
*/

или
/* 
      $foo = 1 + 2; 
      $foo = $foo; 
      print $foo;


То есть комментарий может быть не закрытым.

Есть такая регулярка: /\/\*(.|\s)*?\*\// - она ловит цельные комментарии. Попутный вопрос - на незакрытых комментариях она замораживает браузер на несколько секунд - почему?
Я ее изменил на /\/\*[\S\s]*?\*\// , теперь не тормозит.
Необходимо изменить паттерт, чтоб под него подходили как открытые, так и закрытые комментарии.
Пробовал /\/\*[\S\s]*?(?:\*\/)?/ , но не подходит, так же как и /\/\*[\S\s]*(?:\*\/)?/

Две последовательных проверки : /\/\*(.|\s)*?\*\// , затем /\/\*[\S\s]*/ работают. Вопрос - как можно совместить эти регулярки, или переделать, чтоб решить задачу?
Ответить с цитированием
  #2 (permalink)  
Старый 11.01.2013, 12:18
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от danik.js
Необходимо изменить паттерт, чтоб под него подходили как открытые
Выложите незакрытый коммент вместе с тем, что идёт далее, после него - непонятен критерий определения конца незакрытости(или начала)
Ответить с цитированием
  #3 (permalink)  
Старый 11.01.2013, 12:42
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var str = "/* \n" +
      "$foo = 1 + 2; \n" +
      "$foo = $foo; \n" +
      "print $foo;\n" +
      "*/";

var str2 = "/* \n" +
      "$foo = 1 + 2; \n" +
      "$foo = $foo; \n" +
      "print $foo;";

alert( /\/\*([\S\s]*?)(?:\*\/|$)/.exec( str ) );

alert( /\/\*([\S\s]*?)(?:\*\/|$)/.exec( str2 ) );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2013, 00:18
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

devote, спасибо.
А подсказать кто-нибудь может почему такой код вызывает фриз браузера секунд на 10?
var str = "<?php \n" +
"/* \n" +
"      $foo = 1 + 2; \n" +
"      $foo = $foo; \n" +
"      print $foo;\n" +
"?>";

alert( /\/\*(.|\s)*?\*\//.exec( str ) );
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2013, 03:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от danik.js
А подсказать кто-нибудь может почему такой код вызывает фриз браузера секунд на 10?
var str = "<?php \n\
/* \n\
     $foo = 1 + 2; \n\
     $foo = $foo; \n\
     print $foo;\n\
?> ";
var a = str.replace(/[\s\S]*?(\/\*)[\s\S]*?(?:(\*\/))/img,'$1$2');
alert(a.replace(/\/\*\*\//igm,'')=='');


var str = "<?php \n\
/* \n\
     $foo = 1 + 2; */ /*\n\
     $foo $foo; \n\
     print*/ $foo;/*\n\
?> */";
var a = str.replace(/[\s\S]*?(\/\*)[\s\S]*?(?:(\*\/))/img,'$1$2');
alert(a.replace(/\/\*\*\//igm,'')=='');

Последний раз редактировалось Deff, 12.01.2013 в 07:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярка для вложенных "тегов" типа [[tag? &attr="[[nested]]"]] danik.js Общие вопросы Javascript 5 10.12.2012 04:41
Сравнить две структуры таблиц MySQL Shasoft Общие вопросы Javascript 2 11.07.2012 11:42
регулярка для парсинга SQL запроса Yurik Общие вопросы Javascript 2 09.12.2011 15:08
Регулярка для выдергивания id greatilya Общие вопросы Javascript 2 24.10.2011 11:31