Вход

Просмотр полной версии : Парсинг собственных тегов


nixml
15.04.2013, 15:47
есть некая строка, например:
var string = "
начало строки
text1
середина
text25text
конец";
в ней есть самопальные теги, содержащие некие строки
теги могут отличаться только дополнительным атрибутом
а сама строка содержит символы "перевода строки"

если не использовать дополнительные атрибуты тегов, то доступ к содержимому можно получить следующим кодом:
var g = '12';
var q = g.match(/\[tag\](\n|\r|.)*?\[\/tag\]/g);
alert(q);
на выходе имею нужный мне массив
дальше я делаю .replace(/\[\/?tag\]/g, '')
но появилась задача отличать между собой содержимое одинаковых тегов, введя дополнительный атрибут.

и тут появилась проблема поиска еще одного вхождения, а именно атрибута тега
если чуть изменить регулярку, на
/\[tag=(.*)\](\n|\r|.)*?\[\/tag\]/g
то в результате я получаю строку text1серединаtext25text
таким образом регулярка захватывает лишние данные и все ломается
что мне нужно изменить, может почитать, чтобы починить свой код?

Aetae
15.04.2013, 16:11
/\[tag=([^\]]*)\]([\S\s])*?)\[\/tag\]/g

nixml
15.04.2013, 18:01
Только это все не то. Вхождения то я не получаю в результате.

SV0L0CH
15.04.2013, 18:18
можно разбить на фрагменты и по ним построить дерево, приблизительно это можно сделать так:

alert(JSON.stringify("началоtext1серединаtext2конец".split(/(?=\[.*?\])|(?=\])/)));

Можно так же воспользоваться решениями типа этого https://github.com/Svoloch/js-text-tools
Только сразу предупреждаю, это будет не в пользу быстродействия.