为什么这个javascript正则表达式不匹配第二个和第四个模式?

为什么这个javascript正则表达式不匹配第二个和第四个模式?,javascript,regex,Javascript,Regex,新的数据输出是“”,$,2,$,4,$,“ 但是我期待着,$,$,$,$,$,“,有人能给我解释一下为什么吗?谢谢 var data=“,1,2,3,4,5;”; 变量模式=/,\d,/g var new_data=data.replace(模式、功能(匹配){ 返回“,$,”; }); console.log(新的_数据)

新的数据输出是“
”,$,2,$,4,$,“

但是我期待着,$,$,$,$,$,“,有人能给我解释一下为什么吗?谢谢

var data=“,1,2,3,4,5;”;
变量模式=/,\d,/g
var new_data=data.replace(模式、功能(匹配){
返回“,$,”;
});

console.log(新的_数据),\d,
会吃掉
,1,
。然后正则表达式引擎会尝试匹配下一个
,\d,
,因为第一个模式会吃掉
,而
之前存在的
,2,
对正则表达式引擎不可见。同样的情况也发生在
4

所以你可以用积极的前瞻

string.replace(/,\d(?=,)/g, ",$")

这里第二个逗号不匹配,因为lookarounds是不会捕获任何单个字符的断言。

因为
,\d,
会吃掉
,1,
。然后正则表达式引擎会尝试匹配下一个
,\d,
,因为第一个模式会吃掉
,而
之前存在的
,2,
对正则表达式引擎不可见。同样的情况也发生在
4

所以你可以用积极的前瞻

string.replace(/,\d(?=,)/g, ",$")

这里第二个逗号不匹配,因为lookarounds是不会捕获任何单个字符的断言。

您可以通过删除最后一个逗号来解决这个问题

/,\d/g
问题是第一个匹配项正在使用第二个逗号

例如:

,1,2,3,4,5
匹配1:
,1,

,2,
不匹配,因为第一个逗号由匹配项1使用

数学2:
,3,


,4,
不是匹配项,因为匹配项2使用了第一个逗号您可以通过删除最后一个逗号来解决此问题

/,\d/g
问题是第一个匹配项正在使用第二个逗号

例如:

,1,2,3,4,5
匹配1:
,1,

,2,
不匹配,因为第一个逗号由匹配项1使用

数学2:
,3,


,4,
不是匹配项,因为匹配项2使用了第一个逗号,但这会略微修改模式的含义。如果它以
,5
结尾,它将匹配,不仅如果它以
,5,
结尾,你是对的,而且我将保留我的答案,因为OP可能会发现这很有用。感谢您对@dognose的评论,但这会悄悄地修改模式的含义。如果它以
,5
结尾,它将匹配,不仅如果它以
,5,
结尾,你是对的,而且我将保留我的答案,因为OP可能会发现这很有用。感谢您的评论@dognoseif I use?:即使它没有捕获“,”,它仍然会吃掉“,”,似乎只是?=向前看没有吃掉任何字符,很高兴了解一些关于regex的新内容,谢谢@avinash rajees
(?:)
(非捕获组)应该匹配字符。如果我使用?:即使它没有捕获“,”,它仍然消耗“,”,似乎只是?=向前看,没有消耗任何字符,很高兴了解一些关于regex的新信息,谢谢@avinash rajyes
(?:)
(非捕获组)应该匹配字符。