с 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++ ? '|':'.';});
Что регулярок аромат? –
Наверное, проще всего найти все и пропустить/снять первый. В противном случае, возможно, используйте lookbehind ... Вы хотите получить _just_ точки (т. Е. Их местоположение) или также материал между ними? –
Мне нужно это для регулярного выражения javascript. Извините – gabrielgeo