Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2013, 15:47
Новичок на форуме
Отправить личное сообщение для nixml Посмотреть профиль Найти все сообщения от nixml
 
Регистрация: 15.04.2013
Сообщений: 4

Парсинг собственных тегов
есть некая строка, например:
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]
таким образом регулярка захватывает лишние данные и все ломается
что мне нужно изменить, может почитать, чтобы починить свой код?
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2013, 16:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

/\[tag=([^\]]*)\]([\S\s])*?)\[\/tag\]/g
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2013, 18:01
Новичок на форуме
Отправить личное сообщение для nixml Посмотреть профиль Найти все сообщения от nixml
 
Регистрация: 15.04.2013
Сообщений: 4

Только это все не то. Вхождения то я не получаю в результате.
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2013, 18:18
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

можно разбить на фрагменты и по ним построить дерево, приблизительно это можно сделать так:
alert(JSON.stringify("начало[tag=tagname1]text1[/tag]середина[tag=tagname2]text2[/tag]конец".split(/(?=\[.*?\])|(?=\])/)));

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DOM модель подсчет тегов документа kent666 Events/DOM/Window 4 17.10.2011 21:51
парсинг тегов, как userjs xhugo Общие вопросы Javascript 7 11.05.2011 19:38
Вытащить со страницы все значения name и value из тегов <input> qwr938 Общие вопросы Javascript 8 13.02.2011 15:16
Перебор вложенных тегов. werdes jQuery 0 27.07.2010 11:51
Как переместить курсор внутри тегов? alex-v Javascript под браузер 8 29.08.2009 23:07