Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка для вложенных "тегов" типа [[tag? &attr="[[nested]]"]] (https://javascript.ru/forum/misc/33826-regulyarka-dlya-vlozhennykh-tegov-tipa-%5B%5Btag-attr%3D-%5B%5Bnested%5D%5D-%5D%5D.html)

danik.js 09.12.2012 19:41

Регулярка для вложенных "тегов" типа [[tag? &attr="[[nested]]"]]
 
Есть такой "тег": [[tag]]. Нужно регуляркой найти этот тег. Поблема в том что внутри тэга может быть сколько угодно других таких тегов, как по количеству на уровне, так и по уровню вложенности, например

[[tag? &attr="[[nested]]" &anotherattr="[[$[[yet]]]]" ]]

Причем таких тегов может быть несколько. Вот ломаю голову, как составить регулярку, отлавливающую теги (нужны теги только верхнего уровня, тоесть вложенные не нужны). И вобще, реально ли ее составить? И если нет, может кто-нибудь помочь составить регулярку для ограниченного уровня вложенности? Например для 3-х уровней? Или как-то программно сгенерировать для скажем 10 уровней (этого точно должно хватить)? По идее получится большая регулярка, но на производительность особо этож не должно влиять? У меня обычно не более 10 тегов верхнего уровня и не более 3-4 уровней вложенности.

pikko 09.12.2012 19:45

что именно из этого:
Цитата:

Сообщение от danik.js
[[tag? &attr="[[nested]]" &anotherattr="[[$[[yet]]]]" ]]

надо найти?

danik.js 09.12.2012 21:41

Допустим, есть текст:

Заголовок: [[*longtitle:default=`[[*pagetitle]]`]]
Лорем ипсум [[tag]] долор сит [[~[[*id]]]] амет...


Нужно получить:
[
0: "[[*longtitle:default=`[[*pagetitle]]`]]",
1: "[[tag]]",
2: "[[~[[*id]]]]"
]

Реально ли такую задачу решить через регулярки?

рони 09.12.2012 23:47

danik.js,
Вариант...
var reg = /\[\[.*?\]\](\s|$)/g,
 str = 'Заголовок: [[*longtitle:default=`[[*pagetitle]]`]] Лорем ипсум [[tag]] долор сит [[~[[*id]]]] амет...'
 alert(str.match(reg).join("\n"))

nerv_ 10.12.2012 00:19

Цитата:

Сообщение от danik.js
Реально ли такую задачу решить через регулярки?

да. Аналогичные задачи уже всплывали на форуме. http://javascript.ru/forum/misc/2493...ng-bbcode.html

рони, св :)

Aetae 10.12.2012 04:41

Цитата:

Сообщение от iMaxmaxmaximus (Сообщение 220582)
ё маё, пробегайся несколько раз парсером и все, или веди стек открывающий и закрывающих скобочек

Только регулярки в 100500 символов, только хардкор!


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