Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка для многострочного комментария (https://javascript.ru/forum/misc/51456-regulyarka-dlya-mnogostrochnogo-kommentariya.html)

ksa 07.11.2014 11:42

Регулярка для многострочного комментария
 
Помогите сделать регулярку для многострочного комментария...
Пока сделал так
<style type='text/css'>
span {
	color: green;
}
</style>
<pre id='test'>
AMCL ;Авторы;Мобильный клиент;;[ 10/09/2014 16:27 ]
 N ; * Включить установки мобильного клиента *
#define ABC 1 
n
 d CLR^ASYS()
 i i=0 w /cup(y,1),std d j krt s y=y+1 q
 /* s a=Locate(abc) */
 /// йцукенгшщзхъёфывап
 /* ролджэячсмитьбюЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ */
 /* йцукенгшщзхъёфывап d CLR^ASYS 
 ролджэячсмитьбюЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ */
 w /ed(2)
	j des ABCDq
 set x=10
 s y=1
 s o=##class(user.tmp).%New()
 /*
 s x=1
 s n=0
 */ 
 s:$d(@%zg@($g(%zn,0),%zz)) @%zz=@%zg@($g(%zn,0),%zz)
 s y=@glb@(10)
 s i=""
 /*
 d ad
 */
 w $j,$i,$zzu
 /* s a=$Locate(abc) */
 s f=$$Fld^ASYS
 w $$Cent^zfunc("",80)
</pre>
<script type='text/javascript'>
var o=document.getElementById('test');
var txt=o.innerHTML;
txt=txt.replace(/(\/\*[^\*\/]*\*\/)/g,'<span>$1</span>')
o.innerHTML=txt
</script>

Но это не сработает если внутри комментария будут символы * или /... :(

ksa 07.11.2014 11:45

Правда все это осложнится применением в парсере одного дельфийского компонента...
Но это уже вообще наши проблемы. Пока просто есть интерес в просто JS...

рони 07.11.2014 12:20

ksa,
<style type='text/css'>
span {
	color: green;
}
</style>
<pre id='test'>
AMCL ;Авторы;Мобильный клиент;;[ 10/09/2014 16:27 ]
 N ; * Включить установки мобильного клиента *
#define ABC 1
n
 d CLR^ASYS()
 i i=0 w /cup(y,1),std d j krt s y=y+1 q
 /* s a=Locate(abc) */
 /// йцукенгшщзхъёфывап
 /* ролджэячсмитьбюЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ */
 /* йцукенгшщзхъёфывап d CLR^ASYS
 ролджэячсмитьбюЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ */
 w /ed(2)
	j des ABCDq
 set x=10
 s y=1
 s o=##class(user.tmp).%New()
 /*
 s x=1
 s n=0
 */
 s:$d(@%zg@($g(%zn,0),%zz)) @%zz=@%zg@($g(%zn,0),%zz)
 s y=@glb@(10)
 s i=""
 /* *****
 d ad
 */
 w $j,$i,$zzu
 /* s a=$Locate(abc) */
 s f=$$Fld^ASYS
 w $$Cent^zfunc("",80)
</pre>
<script type='text/javascript'>
var o=document.getElementById('test');
var txt=o.innerHTML;
txt=txt.replace(/(\/\*[\s\S]*?\*\/)/g,'<span>$1</span>')
o.innerHTML=txt
</script>

kobezzza 07.11.2014 12:30

https://github.com/kobezzza/Escaper

На всяк случай оставлю тут :)

ksa 07.11.2014 13:11

рони, с этого и начали... Но там видать "жадный" поиск стоит... Выделяет все от первого /* до последнего */ :(

ksa 07.11.2014 13:21

Цитата:

Сообщение от рони
/(\/\*[\s\S]*?\*\/

Сработало! :thanks:

Я пробовал вот как
/(\/\*[\s\S]*\*\/

Т.е. без ? знака... Даже предположить не мог, что он тут к месту, да еще и будет определяющим! :blink:
* ведь и так предполагает от 0 до любого количества... И ? там вроде как избыточен...

Как словами будет читаться твоя регулярка?

рони 07.11.2014 13:27

ksa,
начать с комбинации символов/* затем найти все символы включая переводы строк, если таковые будут или нет, до первой комбинации */

рони 07.11.2014 13:33

ksa,
Цитата:

? - "Если используется сразу после одного из квантификаторов *, +, ?, или {}, то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна),
http://javascript.ru/RegExp

ksa 07.11.2014 13:55

Цитата:

Сообщение от рони
задает "нежадный" поиск

Еще раз спасибо. :thanks:


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