正则表达式不在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)