为什么这个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(?:)
(非捕获组)应该匹配字符。