nerv_,
А где тут позиции? (т.е. где число?) |
Цитата:
Цитата:
function( a, b, c ) { // с - позиция a |
Цитата:
во-вторых, c - позиция всего выражения, а не группы. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
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 |
Тут это сделано, код не обсфуцирован - бери да пользуйся.
|
Цитата:
^(.*?)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) и чем больше вложений тем больше подгрупп будет В общем изврат)) Возможно кому-то пригодится для дальнейших раздумий, но писать такой велосипед... |
Цитата:
alert( 'some text bla bla bla text la la la'.replace( /(t)(ext)/g, function( a, b, c ) { return b+ '#' + c + '#';}) ); или переписывать регу Цитата:
|
Цитата:
|
Цитата:
Я ток седня закончил составлять регулярку в многобукв. Вытаскивает из текста числа прописью и переводит их в числа: одиннадцать целых две сотых -> 11.02 |
Часовой пояс GMT +3, время: 23:58. |