正则表达式匹配除第一次出现之外的所有内容

Regular expression match all except first occurence

本文关键字:第一次 正则表达式      更新时间:2023-09-26

我需要一个正则表达式来匹配除第一个点(.(之外的所有出现。

例如,如果源是: 啊啊日清

表达式应匹配 BBB 和 CCC 之后的点,但与 AAA 之后的点不匹配。在其他作品中,它应该匹配除第一个点之外的所有点。

我需要它用于javascript正则表达式。

使用pcre(PHP,R(你可以这样做:

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

演示

详:

'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:(简单,因为您可以使用可变长度的后视(

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

演示

<小时 />

使用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, (_) => counter++ ? '|' : '.');
<小时 />

使用 NodeJS(或任何其他允许回溯的实现(:

var result = s.replace(/((?:^[^.]*'.)?(?<=.)[^.]*)'./g, "$1|");

使用 arrow 函数 JavaScript 的单行解决方案(ES6(:

'aaa.bbb.ccc..ddd'
   .replace(/'./g, (c, i, text) => text.indexOf(c) === i ? c : '|')
-> 'aaa.bbb|ccc||ddd'
相关文章: