正则表达式不在JavaScript中捕获组
我写了正则表达式正则表达式不在JavaScript中捕获组,javascript,regex,string,Javascript,Regex,String,我写了正则表达式 /translateX\((?<X>-{0,1}\d+)px\)|translateY\((?<Y>-{0,1}\d+)px\)/g 捕获translateX和translateY值。经regex101.com服务测试,效果良好。但是,当我在JavaScript中尝试它时,它捕获translateX值,它是381,而不是捕获translateY,它是-94。你知道为什么会这样吗 regex101 JavaScript exec console.lo
/translateX\((?<X>-{0,1}\d+)px\)|translateY\((?<Y>-{0,1}\d+)px\)/g
捕获translateX
和translateY
值。经regex101.com服务测试,效果良好。但是,当我在JavaScript中尝试它时,它捕获translateX
值,它是381
,而不是捕获translateY
,它是-94
。你知道为什么会这样吗
regex101
JavaScript exec
console.log(/translateX\((?-{0,1}\d+)px\)| translateY\((?-{0,1}\d+)px\)/g.exec(“translateX(381px)translateY(-94px)”)代码>您只需调用一次.next()
,因此您只能获得第一个匹配项。
您需要循环查看.matchAll()
的所有结果
for(m of“translateX(381px)translateY(-94px)”.matchAll(/translateX\((?-{0,1}\d+-px\);translateY\(((?-{0,1}\d+-px\)/g)){
console.log(m.groups);
}
您可以使用此选项一次性查找两个值:
/translateX\((?-?\d+)px\).*translateY\((?-?\d+)px\)/g
console.log(/translateX\(?-?\d+)px\).*translateY\((?-?\d+)px\)/g.exec(“translateX(381px)translateY(-94px)”)
考虑将问题中使用的JS添加为?FYI,{0,1}
通常写为?
以表示可选模式。在上一个示例中,您只调用了一次.next()
,因此您只能获得第一个匹配项。尝试将其转换为数组,您将获得所有匹配项。是的,但我想编写一个表达式,该表达式将查找translateX和translateY,而不考虑它们的位置。像translateX(n)translateY(n)或translateY(n)translateX(n)-这是有效的css转换值。
translateX(381px) translateY(-94px)