每次+后插入1

时间:2014-02-10 18:57:39

标签: javascript regex

我有以下数据集,我需要在其中查找并替换所有出现的内容。变量可以包含其中一个示例,也可以包含多个逗号分隔到行尾。每个都是一个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直到行尾。

2 个答案:

答案 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}}反向引用,我不确定你是否自愿这样做,所以我在这里提到了它。)