2016-02-15 5 views
0

Мне нужно регулярное выражение для соответствия всем вхождениям точки (.), Кроме первой.Регулярное выражение соответствует всем, кроме первого вхождения

Например, если источник: aaa.bbb.ccc..ddd

выражение должно соответствовать точкам после ГЭБА и ссса, но не точки после ааа. В других работах он должен совпадать со всеми точками, кроме первого.

Мне это нужно для регулярного выражения javascript.

+3

Что регулярок аромат? –

+1

Наверное, проще всего найти все и пропустить/снять первый. В противном случае, возможно, используйте lookbehind ... Вы хотите получить _just_ точки (т. Е. Их местоположение) или также материал между ними? –

+0

Мне нужно это для регулярного выражения javascript. Извините – gabrielgeo

ответ

4

с PCRE (PHP, R), вы можете сделать это:

\G(?:\A[^.]*\.)?+[^.]*\K\. 

demo

детали:

\G # anchor for the start of the string or the position after a previous match 
(?:\A[^.]*\.)?+ # start of the string (optional possessive quantifier) 
[^.]* # all that is not a dot 
\K # remove all that has been matched on the left from the match result 
\. # the literal dot 

С .net: (легко, так как вы можете используйте переменную длину lookbehind)

(?<!^[^.]*)\. 

demo


С JavaScript нет способа сделать это с помощью одного шаблона.

используя заполнитель:

var result = s.replace('.', 'PLACEHOLDER') 
       .replace(/\./g, '|') 
       .replace('PLACEHOLDER', '.'); 

(или заменить все точки с |, а затем заменить первое вхождение | с точкой).

с помощью раскола:

var parts = s.split('.'); 
var result = parts.shift() + (parts.length ? '.': '') + parts.join('|'); 

со счетчиком:

var counter=0; 
var result = s.replace(/\./g, function(_){return counter++ ? '|':'.';}); 
+0

Спасибо, это отлично работает для pcre, а также для .NET, если удаляющий квантификатор удален (\ G (?: \ A [^.] * \.)? [^.] * \ K \.). Есть ли опция для javascript? – gabrielgeo

+0

@gabrielgeo: этот шаблон нельзя использовать с .NET (основная причина в том, что функция '\ K' не существует, другая причина в том, что вы не можете использовать шаблон без притяжательного квантификатора, если это только одна точка в строке). См. Мое редактирование для других способов. –

Смежные вопросы