Javascript 在每个+之后插入1;
我有以下数据集,需要在其中查找并替换所有事件。该变量可以包含一个示例,也可以包含多个示例,并在行尾用逗号分隔。每个都是一个10位数字,末尾带有Javascript 在每个+之后插入1;,javascript,regex,Javascript,Regex,我有以下数据集,需要在其中查找并替换所有事件。该变量可以包含一个示例,也可以包含多个示例,并在行尾用逗号分隔。每个都是一个10位数字,末尾带有/TYPE=PLMN 我目前正在使用一个规则,该规则将采用10位数字,这是一个电话号码,因此,例如,仅使用10号2s ([\+]?)([5]?)(\d{10}.*) +1$3 +2222222222/TYPE=PLMN 并在+ +12222222222/TYPE=PLMN 但是,当它遇到多个实例时,它将仅替换第一个实例,而不会触及其余实例 +2222
/TYPE=PLMN
我目前正在使用一个规则,该规则将采用10位数字,这是一个电话号码,因此,例如,仅使用10号2
s
([\+]?)([5]?)(\d{10}.*) +1$3
+2222222222/TYPE=PLMN
并在+
+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
,直到行尾。使用全局开关:
s='+2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN, +2222222222/TYPE=PLMN'
r=s.replace(/\+/g, '+1');
//=> "+12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN, +12222222222/TYPE=PLMN"
首先,您的正则表达式有一个贪婪的字符:
*
这里:
([\+]?)([5]?)(\d{10}.*)
^^
这将匹配第一次匹配后的所有内容,并防止任何其他匹配,因为匹配不会重叠。因此,即使您有全局标志,您也无法使用该正则表达式获得预期的结果。只要删除它,我相信如果您使用/TYPE=PLMN
会更安全,因为您已经指定了它
如果要在一个+
之后添加一个1
,但后面没有另一个1
,则必须使用负前瞻
/([\+]?)(?!1)([5]?)(\d{10})\/TYPE=PLMN/g, "+1$3"
^^^^^
但是你的正则表达式可以改进一点。您不需要在字符类中转义+
,实际上可以将其编写为:\+?
。与([5]?)
相同,您可以将其编写为(5?
:
我想应该这样
注意:如果你有一个像:51234567890
这样的数字,它将被转换成+11234567890
(将5
放在那里。如果你不把$2
放回引用,我不确定你是否自愿这么做,所以我在这里提到了它)。在你的正则表达式上使用
/(\+?)(?!1)(5?)(\d{10})\/TYPE=PLMN/g, "+1$3"