Парсинг собственных тегов
есть некая строка, например:
var string = " начало строки [tag=tagname1]text1[/tag] середина [tag=tagname2]text25text[/tag] конец"; в ней есть самопальные теги, содержащие некие строки теги могут отличаться только дополнительным атрибутом а сама строка содержит символы "перевода строки" если не использовать дополнительные атрибуты тегов, то доступ к содержимому можно получить следующим кодом: var g = '[tag]1[/tag][tag]2[/tag]'; var q = g.match(/\[tag\](\n|\r|.)*?\[\/tag\]/g); alert(q); на выходе имею нужный мне массив дальше я делаю .replace(/\[\/?tag\]/g, '') но появилась задача отличать между собой содержимое одинаковых тегов, введя дополнительный атрибут. и тут появилась проблема поиска еще одного вхождения, а именно атрибута тега если чуть изменить регулярку, на /\[tag=(.*)\](\n|\r|.)*?\[\/tag\]/g то в результате я получаю строку [tag=tagname1]text1[/tag]середина[tag=tagname2]text25text[/tag] таким образом регулярка захватывает лишние данные и все ломается что мне нужно изменить, может почитать, чтобы починить свой код? |
/\[tag=([^\]]*)\]([\S\s])*?)\[\/tag\]/g
|
Только это все не то. Вхождения то я не получаю в результате.
|
можно разбить на фрагменты и по ним построить дерево, приблизительно это можно сделать так:
alert(JSON.stringify("начало[tag=tagname1]text1[/tag]середина[tag=tagname2]text2[/tag]конец".split(/(?=\[.*?\])|(?=\])/))); Можно так же воспользоваться решениями типа этого https://github.com/Svoloch/js-text-tools Только сразу предупреждаю, это будет не в пользу быстродействия. |
Часовой пояс GMT +3, время: 20:39. |