Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.04.2013, 12:11
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

nerv_,
А где тут позиции?
(т.е. где число?)

Последний раз редактировалось rgl, 05.04.2013 в 12:13.
Ответить с цитированием
  #12 (permalink)  
Старый 05.04.2013, 12:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от rgl
А где тут позиции?
во-первых, нафига они нужны, если требуется
Сообщение от edison
сделать подсветку найденных групп
во-вторых
function( a, b, c ) { // с - позиция a
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #13 (permalink)  
Старый 05.04.2013, 13:33
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от nerv_ Посмотреть сообщение
во-первых, нафига они нужны,

во-вторых
function( a, b, c ) { // с - позиция a
Во-первых, как подсветить, не зная что нужно подсвечивать?
во-вторых, c - позиция всего выражения, а не группы.
Ответить с цитированием
  #14 (permalink)  
Старый 05.04.2013, 16:26
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от rgl
как подсветить, не зная что нужно подсвечивать
первый пост почитай
Сообщение от edison
сделать подсветку найденных групп в исходном тексте

Сообщение от rgl
c - позиция всего выражения, а не группы
о чем я написал постом выше
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #15 (permalink)  
Старый 05.04.2013, 17:30
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от nerv_ Посмотреть сообщение
первый пост почитай
Читаю:
Сообщение от nerv_ Посмотреть сообщение
alert( 'some text bla bla bla text la la la'.replace( /t(ext)/g, function( a, b ) { return '#' + b + '#';}) );
и вижу, что получается не то. Ну, напр. сделаем так:

alert( 'CLEAR="left" causes the next text line to start down as soon as the left margin is clear'.replace( /next t(ext)/g, function( a, b ) { return '#' + b + '#';}) );


Получается не
CLEAR="left" causes the next t#ext# line to start down as soon as the left margin is clear
а
CLEAR="left" causes the #ext# line to start down as soon as the left margin is clear
Ответить с цитированием
  #16 (permalink)  
Старый 05.04.2013, 23:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

Тут это сделано, код не обсфуцирован - бери да пользуйся.
__________________
29375, 35
Ответить с цитированием
  #17 (permalink)  
Старый 07.04.2013, 02:16
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

Сообщение от Aetae Посмотреть сообщение
бери да пользуйся.
Спасибо, но там выделяет не именно те матчи которые совпали, а идет реплейс
^(.*?)match1(.*?)match2(.*?)match3(.*?)$
на
$1<span class="group-1">match1</span>$2<span class="group-2">match2</span>$3<span class="group-3">match3</span>$4

соответственно это не точные позиции матчей.
Я примерно такое-же делал, только я сдвигал позицию под каждое совпадение, чтобы они были последовательно подсвечены.

Если ввести там регексп из моего первого сообщения то на выходе будет
xxab
aaaa
aaaa
bbbb
baxt

ну и группа в группе тоже сдвинет весь результат
(aaa(a))\na(a)aa\nbb(b)

xxab
aaaa
aaaa
bbbb
baxt

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

мысль только распарсить регулярку поочередно закрывая все группы (? кроме одной и по бокам этой группы заключать в скобки части регулярки.


допустим имеем
(aaa(a))\na(a)*aa\nbb(b)
преобразуем
(aaa(?:a))(\na(?:a)*aa\nbb(?:b)) т.к. первая группа начинается с самого вхождения, то выйдет всего 2 группы, тоже самое если мы работаем с последней группой и регексп заканчивается ей

получаем

aaaa

и

aaaa
bbbb

получаем начальную позицию длина pos=матч1+index
высчитываем позицию окончания
poslast=матч0-(матч1+матч3), тем самым мы высчитаем длину матча (a)* - когда группа повторяется или poslast=длинна совпадения+матч0-(матч1+матч2+матч3) в зависимости от того будем мы захватывать *?+ и т.д. после группы те. будет у нас так (a)* или мы преобразуем группу в ((?:a)*)

итого на выходе мы будем иметь позицию и длину вхождения

второе преобразование соответственно такое

(?aaa)(a))(\na(?:a)*aa\nbb(?:b))

((?:aaa(?:a))\na)(a)*(aa\nbb(?:b))

и т.д.

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

поправлюсь, количество новых групп не будет ограничено от 2 до 3, а будет расширятся если у нас подгруппа для которой мы находим позицию находится в другой подгруппе (-ах) т.е s(aaa(a)s)x - получится нужно проставить еще 4 подгруппы (s)(?aaa)(a)(s))(x) и чем больше вложений тем больше подгрупп будет

В общем изврат)) Возможно кому-то пригодится для дальнейших раздумий, но писать такой велосипед...
Ответить с цитированием
  #18 (permalink)  
Старый 09.04.2013, 01:03
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от edison
nerv_ заменяется ведь все вхождение регексп, вот если бы только подгруппы можно было заменить
alert( 'some text bla bla bla text la la la'.replace( /(t)(ext)/g, function( a, b, c ) { return b+ '#' + c + '#';}) );

или переписывать регу

Сообщение от rgl
и вижу, что получается не то
ну а додумать?) не?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 09.04.2013 в 01:07.
Ответить с цитированием
  #19 (permalink)  
Старый 09.04.2013, 01:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,501

Сообщение от nerv_ Посмотреть сообщение
ну а додумать?) не?
Внимательнее читаем, нэ. В предыдущем посте человек объяснил, почему это не так просто. Он имеет дело не с конкретной регуляркой, функция должна работать с произвольной.
__________________
29375, 35
Ответить с цитированием
  #20 (permalink)  
Старый 09.04.2013, 01:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Aetae
функция должна работать с произвольной.
с чем бы она не работала, как правило, всегда есть от чего оттолкнуться. Если нет, то нет смысла писать код, тем более реги.

Я ток седня закончил составлять регулярку в многобукв. Вытаскивает из текста числа прописью и переводит их в числа: одиннадцать целых две сотых -> 11.02
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Способ реализации позитивного просмотра в перед в регулярном выражении 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