参考这个SO问题:Cutting a string at nth occurrence of a character
有一个稍微不同的问题:这可以使用正则表达式完成吗?
"aa.bb.cc.dd.ee.xx" => "aa.bb.NN.dd.ee.ff"
(replacing only 3rd occurrence, all chars are random alphanumeric text )
注意: .split()。slice()。join()是一个可读的解决方案,正则表达式似乎可行且简单明了(我可能错了)。例如:替换前两个" aa。"和" bb。"说' AoA'和BoB'似乎微不足道: -
`"aa.bb.cc.dd.ee.xx".replace(/([^\.]*\.){2}/, 'AoA.BoB.')`
修改,因为" 。"意味着匹配任何东西'在正则表达式中,请使用" ; " (分号)代替。为了使它更难,如果我们有这样的字符串怎么办:
"斧;; CYZ; DEF; eghi; XYZW"我们想要替换第3部分(例如:cyz)
答案 0 :(得分:3)
要替换第三次出现,您将匹配:
^((\w{2}\.){2})\w{2}\.(.*)$
并替换为:
\ 1NN。\ 3
要替换第n次出现,您将匹配:
^((\w{2}\.){n-1})\w{2}\.(.*)$
Demo
征求意见:
^(([^;]*\;){2})[^;]*\;(.*)$
Demo2
答案 1 :(得分:2)
对于此特定字符串实例,您还可以使用以下内容。
[^.]*(?=(?:\.[^.]*){3}$)
正则表达式
[^.]* any character except: '.' (0 or more times)
(?= look ahead to see if there is:
(?: group, but do not capture (3 times):
\. '.'
[^.]* any character except: '.' (0 or more times)
){3} end of grouping
$ before an optional \n, and the end of the string
) end of look-ahead
请参阅Live demo
答案 2 :(得分:2)