我有一个场景,我需要使用javascript查找并替换大字符串中的数字。让我们说我的数字是2,我想用3代替它 - 这听起来很直接,直到我遇到22,32等事件。
字符串可能如下所示:
"note[2] 2 2_ someothertext_2 note[32] 2finally_2222 but how about mymomsays2."
我想把它变成这样:
"note[3] 3 3_ someothertext_3 note[32] 3finally_2222 but how about mymomsays3."
显然这意味着.replace('2','3')
不在图片中,所以我去了正则表达式。当我处理字符串开始结束时,我发现很容易获得完全匹配,即:/^2$/g
。但那不是我的意思。我尝试了分组,仅数字,通配符等,但我无法正确匹配。
有关如何精确匹配数字的任何帮助(其中0 <=数字&lt; = 500是可能的,但正则表达式中不需要约束)将非常感激。
答案 0 :(得分:2)
(\D|\b)2(?!\d)
(\D|\b)
捕获非数字字符或与字边界匹配的位置(?!\d)
否定前瞻确保后面的内容不是数字交替:
(^|\D)2(?!\d) # Thanks to @Wiktor in the comments below
(?<!\d)2(?!\d) # At the time of writing works in Chrome 62+
const regex = /(\D|\b)2(?!\d)/g
const str = `note[2] 2 2_ someothertext_2 note[32] 2finally_2222 but how about mymomsays2.`
const subst = "$13"
console.log(str.replace(regex, subst))
答案 1 :(得分:2)
答案 2 :(得分:2)
任务是寻找(和替换)&#34;单身&#34;数字2,未嵌入 由多个数字组成的数字。
在正则表达式中,这可以表示为:
2
。第一个条件的正则表达式很简单 - 仅2
。
在其他正则表达式中,例如 PCRE ,禁止前一个
char你可以使用负面的lookbehind ,但遗憾的是Javascript
正则表达式不支持它。
因此,为了规避这一点,我们必须:
(^|\D)
。2
。幸运的是,最后一个条件可以表示为负向前瞻,
因为即使是Javascript正则表达式也支持它:(?!\d)
。
所以整个正则表达式是:
(^|\D)2(?!\d)
找到这样的匹配后,您必须将其替换为内容 第一个捕获组和 3 (替换数字)。