Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2013, 14:44
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

позиция подмасок в в регулярном выражении
пишу конструктор регулярных выражений, есть желание в нем сделать подсветку найденных групп в исходном тексте.
пример - исходный текст:

xxab
aaaa
aaaa
bbbb
baxt

регулярка

/aaa(a)\na(a)aa\nbb(b)/

как найти позиции найденных групп?

чтобы я мог пометить их

xxab
aaaa
aaaa
bbbb
baxt

пример создан искусственно, регулярки могут быть разной сложности (любые) и исходный текст тоже.
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2013, 22:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

В нэте полно online regexp тестеров. Посмотрите как оные устроены.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2013, 03:04
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

Смотрел несколько десятков онлайн конструкторов, не нашел чтобы подсвечивало подгруппы. Или всё совпадение подсвечивает или текстом выдает результат.
Нашел такое решение:
var m= /(s+)(.*?)(l)([^l]*?)(o+)/.exec('this is hello to you');
function indexOfGroup(match, n) {
    var ix= match.index;
    for (var i= 1; i<n; i++)
        ix+= match[i].length;
    return ix;
}

alert(indexOfGroup(m, 3));

но минус его в том, что придется добавлять в регулярку дополнительные группы, что будет очень большой геморой при сложной регулярке, ну и придется высчитывать позиции прежних матчей, а если группа в группе, так совсем не пойми что...

Пока думаю остановится на варианте с использованием ajax+php (preg_match PREG_OFFSET_CAPTURE) но постоянно отправлять на сервер запросы не есть гуд.
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2013, 03:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

А никто не говорил, что будет легко.)
Я так понял у вас должна быть работа не с regexp js, а regexp как таковыми и в этом вся сложность. Возможно вам поможет эта вещица.
__________________
29375, 35

Последний раз редактировалось Aetae, 02.04.2013 в 03:28.
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2013, 12:07
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

edison,
Сложение матчей не дает в результате исходную строку. Допустим, в регулярке есть вложенные скобки, или же скобки со звездой после. Что будет в этом случае? Ну, напр. строка "abcd1d2d3efg" и регулярка /(d\d)*/
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2013, 12:25
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от edison
пишу конструктор регулярных выражений
а зачем? (вопрос не риторический, если ты обучаешься то подскажу)
Ответить с цитированием
  #7 (permalink)  
Старый 03.04.2013, 18:25
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

Aetae
Не нашел по ссылке решение задачи, только нашел поиск с опр позиции, а вот позиции подмасок не увидел. Еще там были примеры с index и lastIndex но это позиции вхождения всего шаблона.
rgl
Да я это написал, что если группа в группе, то будут сложности. Ну в теории можно вкладывать такие группы в другую группу, подсчитывать количество символов выкидывать ненужные значения и т.д. и т.п. в общем там кода будет на целый проект)
megaupload
Нет не обучаюсь, пишу под себя так как приходится много регехп составлять и необходим свой инструмент со своими нюансами в реализации от вставки текста из базы и подсчета количества символов, до автоматической замены некоторых участков в самой регулярке.

Остановлюсь тогда на связке ajax+php, спасибо что подумали со.
Ответить с цитированием
  #8 (permalink)  
Старый 03.04.2013, 18:38
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Хорошая программка, и группы подсвечивает (не онлайн)
http://www.regexbuddy.com/screens/debug.png
Ответить с цитированием
  #9 (permalink)  
Старый 04.04.2013, 00:30
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

rgl Спасибо, но я наверное не в полной мере объяснил что именно хочу сделать.
конструктор уже написан, там нету только подсветки групп. Конструктор является небольшой частью всего функционала. Переносить весь функционал на другой яп будет очень проблематично, сейчас основаня часть это php+js из которого только JS на 500 кб (я говорю о всем функционале, а не только о конструкторе regexp). А так как я изучаю языки всего то около года. То я подумал, что возможно, где-то что-то упустил в мануалах и есть возможность выводить позиции матчей, например как это сделано в пхп. У меня сейчас только 3 выхода, это переписывать полностью клиенскую часть на С, найти возможность реализовать поиск позиции на JS или отправлять регехп в другую среду и получать оттуда уже ответ с позициями. В принципе не очень важная функция и сэкономит мне несколько секунд времени на составление 1 регехп, но из мелочей так и получается ощутимая экономия (до этого вообще приходилось вручную перебирать пару десятков регулярок и пробовать их обрезать, сейчас помогает конструктор и на автомате подставляет уже составленные регулярки и пробует их переделать под исходный текст). Пока пришел к выводу что для меня сейчас рациональнее сделать ajax+php потом попробую почитать мануалы по java,flash возможно там есть нужный мне функционал, чтобы сделать его на клиентской части, а не отправлять постоянно данные на сервер.
Ответить с цитированием
  #10 (permalink)  
Старый 05.04.2013, 11:22
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от edison
как найти позиции найденных групп?
alert( 'some text bla bla bla text la la la'.replace( /t(ext)/g, function( a, b ) { return '#' + b + '#';}) );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Способ реализации позитивного просмотра в перед в регулярном выражении kichSman Общие вопросы Javascript 10 11.04.2012 21:19
Как в регулярном выражении обозначается "может быть а может и не быть" ? [MI_nor] Общие вопросы Javascript 4 30.11.2011 21:09
Как в регулярном выражении использовать переменную? avaVusal Общие вопросы Javascript 7 23.08.2011 15:07
количество повторений в регулярном выражении mrWong Общие вопросы Javascript 2 10.02.2010 12:57
Проблема с кавычкой в регулярном выражении bandolero Общие вопросы Javascript 5 31.01.2010 11:37