Javascript 正则表达式匹配除第一次出现以外的所有
我需要一个正则表达式来匹配除了第一个点以外的所有点(.) 例如,如果源是: aaa.bbb.ccc..ddd 表达式应与bbb和ccc后的点匹配,但与aaa后的点不匹配。在其他作品中,它应该匹配除第一个点以外的所有点Javascript 正则表达式匹配除第一次出现以外的所有,javascript,regex,Javascript,Regex,我需要一个正则表达式来匹配除了第一个点以外的所有点(.) 例如,如果源是: aaa.bbb.ccc..ddd 表达式应与bbb和ccc后的点匹配,但与aaa后的点不匹配。在其他作品中,它应该匹配除第一个点以外的所有点 我需要它用于javascript正则表达式。使用pcre(PHP,R)可以做到: \G(?:\A[^.]*\.)?+[^.]*\K\. 详情: \G # anchor for the start of the string or the position after a pre
我需要它用于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:(简单,因为您可以使用可变长度的lookback) (或用
|
替换所有点,然后用点替换第一个出现的|
)
使用拆分:
var parts = s.split('.');
var result = parts.shift() + (parts.length ? '.': '') + parts.join('|');
带计数器:
var counter = 0;
var result = s.replace(/\./g, (_) => counter++ ? '|' : '.');
使用NodeJS(或允许lookbehinds的任何其他实现):
var result=s.replace(/(?:^[^.]*\)?(?使用箭头函数的JavaScript单行解决方案(ES6):
什么样的正则表达式味道?可能最简单的方法就是找到所有的正则表达式并跳过/去掉第一个。否则,可能需要使用lookback…你想只得到点(即它们的位置)还是中间的东西?我需要它用于javascript正则表达式。对不起,谢谢,如果所有格量词被删除(\G(?:\a[^.]*\),这对pcre和.NET都非常有用?[^.]*\K\)。javascript也有选项吗?@gabrielgeo:没有。此模式不能与.NET一起使用(主要原因是\K
功能不存在,另一个原因是如果字符串中只有一个点,则在没有所有格量词的情况下无法使用该模式)。有关其他方法,请参阅我的编辑。
var parts = s.split('.');
var result = parts.shift() + (parts.length ? '.': '') + parts.join('|');
var counter = 0;
var result = s.replace(/\./g, (_) => counter++ ? '|' : '.');
var result = s.replace(/((?:^[^.]*\.)?(?<=.)[^.]*)\./g, "$1|");
'aaa.bbb.ccc..ddd'
.replace(/\./g, (c, i, text) => text.indexOf(c) === i ? c : '|')
-> 'aaa.bbb|ccc||ddd'