Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка для комментариев /* comment */ , опционально закрытых (https://javascript.ru/forum/misc/34591-regulyarka-dlya-kommentariev-%2A-comment-%2A-opcionalno-zakrytykh.html)

danik.js 11.01.2013 11:04

Регулярка для комментариев /* 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]*/ работают. Вопрос - как можно совместить эти регулярки, или переделать, чтоб решить задачу?

Deff 11.01.2013 12:18

Цитата:

Сообщение от danik.js
Необходимо изменить паттерт, чтоб под него подходили как открытые

Выложите незакрытый коммент вместе с тем, что идёт далее, после него - непонятен критерий определения конца незакрытости(или начала)

devote 11.01.2013 12:42

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 ) );

danik.js 12.01.2013 00:18

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

alert( /\/\*(.|\s)*?\*\//.exec( str ) );

Deff 12.01.2013 03:24

Цитата:

Сообщение от 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,'')=='');


Часовой пояс GMT +3, время: 23:54.