我需要一个正则表达式来匹配除第一个点之外的所有点(。)。
例如,如果来源是: aaa.bbb.ccc..ddd
表达式应与bbb和ccc之后的点匹配,但不能与aaa之后的点匹配。在其他作品中,它应匹配除第一个点以外的所有点。
我需要javascript正则表达式。
答案 0 :(得分:5)
使用pcre(PHP,R)你可以这样做:
\G(?:\A[^.]*\.)?+[^.]*\K\.
https://github.com/apache/cordova-plugin-media-capture
细节:
\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很容易)
(?<!^[^.]*)\.
使用javascript无法使用单一模式执行此操作。
使用占位符:
var result = s.replace('.', 'PLACEHOLDER')
.replace(/\./g, '|')
.replace('PLACEHOLDER', '.');
(或用|
替换所有点,然后用点代替第一次出现的|
。
使用split:
var parts = s.split('.');
var result = parts.shift() + (parts.length ? '.': '') + parts.join('|');
带一个柜台:
var counter=0;
var result = s.replace(/\./g, function(_){return counter++ ? '|':'.';});
答案 1 :(得分:4)
使用箭头功能(ES6)的JavaScript一线解决方案:
'aaa.bbb.ccc..ddd'
.replace(/\./g, (c, i, text) => text.indexOf(c) === i ? c : '|')
-> 'aaa.bbb|ccc||ddd'