我有以下数据集,我需要在其中查找并替换所有出现的内容。变量可以包含其中一个示例,也可以包含多个逗号分隔到行尾。每个都是一个10位数字,最后是/TYPE=PLMN
。
我目前使用的规则是10位数字,这是一个电话号码,例如只使用10个数字2
s
([\+]?)([5]?)(\d{10}.*) +1$3
+2222222222/TYPE=PLMN
并在+
之后添加1+12222222222/TYPE=PLMN
然而,当遇到多个实例时,它只会替换第一个匹配项而不会触及剩余的实例。
+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN
有关如何采取
的任何建议+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN
并将所有实例转换为
+12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN
例如,在+
字符行中没有1
之后插入1
直到行尾。
答案 0 :(得分:2)
使用全局开关:
s='+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN'
r=s.replace(/\+/g, '+1');
//=> "+12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN"
答案 1 :(得分:0)
首先,你的正则表达式有一个贪婪的角色:.*
这里:
([\+]?)([5]?)(\d{10}.*)
^^
这将匹配第一场比赛后的所有内容,这将阻止任何其他比赛,因为比赛不重叠。所以即使你有全局标志,你也不会得到那个正则表达式的预期结果。只需删除它,我相信如果您使用/TYPE=PLMN
,则更安全,因为您已经指定了它。
如果您想在1
之后添加+
,而1
之后没有其他/([\+]?)(?!1)([5]?)(\d{10})\/TYPE=PLMN/g, "+1$3"
^^^^^
,那么您将不得不使用否定前瞻。
+
但你的正则表达式可以改善一点。您不需要在字符类中转义\+?
,并且实际上可以将其写为:([5]?)
。对于(5?)
,您可以将其写为/(\+?)(?!1)(5?)(\d{10})\/TYPE=PLMN/g, "+1$3"
:
51234567890
我认为应该这样做。
注意:如果您有一个类似:+11234567890
的号码,它将被转换为5
(将$2
放在那里。如果你没有放回{ {1}}反向引用,我不确定你是否自愿这样做,所以我在这里提到了它。)