Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2012, 19:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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

Причем таких тегов может быть несколько. Вот ломаю голову, как составить регулярку, отлавливающую теги (нужны теги только верхнего уровня, тоесть вложенные не нужны). И вобще, реально ли ее составить? И если нет, может кто-нибудь помочь составить регулярку для ограниченного уровня вложенности? Например для 3-х уровней? Или как-то программно сгенерировать для скажем 10 уровней (этого точно должно хватить)? По идее получится большая регулярка, но на производительность особо этож не должно влиять? У меня обычно не более 10 тегов верхнего уровня и не более 3-4 уровней вложенности.
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2012, 19:45
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

что именно из этого:
Сообщение от danik.js
[[tag? &attr="[[nested]]" &anotherattr="[[$[[yet]]]]" ]]
надо найти?

Последний раз редактировалось pikko, 09.12.2012 в 20:09.
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2012, 21:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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


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

Реально ли такую задачу решить через регулярки?
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2012, 23:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

danik.js,
Вариант...
var reg = /\[\[.*?\]\](\s|$)/g,
 str = 'Заголовок: [[*longtitle:default=`[[*pagetitle]]`]] Лорем ипсум [[tag]] долор сит [[~[[*id]]]] амет...'
 alert(str.match(reg).join("\n"))
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2012, 00:19
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от danik.js
Реально ли такую задачу решить через регулярки?
да. Аналогичные задачи уже всплывали на форуме. Парсинг BBcode

рони, св
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2012, 04:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Сообщение от iMaxmaxmaximus Посмотреть сообщение
ё маё, пробегайся несколько раз парсером и все, или веди стек открывающий и закрывающих скобочек
Только регулярки в 100500 символов, только хардкор!
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярка для выдергивания id greatilya Общие вопросы Javascript 2 24.10.2011 11:31
Скрипт для погоды. Типа плеера. Ruskat Общие вопросы Javascript 1 28.07.2011 02:44
Условие типа для flv nemo Серверные языки и технологии 1 29.01.2010 17:52
Как сделать функцию типа toDataUrl для рисунка в ie6 ? Олег Общие вопросы Javascript 2 14.09.2008 00:06