Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配除第一次出现以外的所有_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式匹配除第一次出现以外的所有

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

我需要一个正则表达式来匹配除了第一个点以外的所有点(.)

例如,如果源是: 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 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'