2016-06-24 4 views
1

У меня есть эта строка:Match открыть и закрыть тег

"<myTag att1="val1"><myTag></myTag></myTag><myTag></myTag>" 

Что мне нужно, чтобы соответствовать:

<myTag att1="val1"><myTag></myTag></myTag> 

Я попытался с регулярным выражением, но он получает:

<myTag att1="val1"><myTag></myTag> 

Как я могу решить?

+0

какое у вас регулярное выражение? Я думаю, вы должны сделать регулярное выражение ленивым следующим образом: (. +?) –

+2

Итак, вы только что узнали, что вы не можете использовать * JS regex для синтаксического анализа вложенных тегов HTML. ** JS regex не поддерживает рекурсию **. Следующий шаг: изучить синтаксический анализ HTML с помощью DOM. –

+3

обязательный http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – pawel

ответ

1

Устранить всеядность по умолчанию и написать что-то ниже: -

(.+?) 

Пожалуйста, обратите внимание, что att1 = "val1" может не распознать в строке в нескольких редакторов. Следовательно, для этого префикса a '\'. Но вышеупомянутое регулярное выражение должно работать

0

Немного более явным, чем другие решения, но с этим вы можете несколько раз добавить myTag myTag.

var res = str.match(/<myTag .*>.*<myTag>.*<\/myTag>[^<]*<\/myTag>/g); 
+0

Как я могу подсчитать, сколько внутренних открытых mytag я получаю, так что Мне нужно найти такое же количество mytag? – granmirupa

+0

Если вы добавите '.length' после матча, вы получите количество совпадений, найденных регулярным выражением. Не уверен, что это то, что вы ищете. Он просто получит общее количество myTag, в котором есть myTag. Лично я использовал бы другое имя для тега, который включает myTag. например myTags. И у javascript есть другие способы поиска определенных тегов, чем просто регулярное выражение. – LukStorms