【发布时间】:2021-08-26 17:02:55
【问题描述】:
我写了正则表达式
/translateX\((?<X>-{0,1}\d+)px\)|translateY\((?<Y>-{0,1}\d+)px\)/g
对于给定的字符串
translateX(381px) translateY(-94px)
捕获translateX 和translateY 值。通过 regex101.com 服务对其进行了测试,它在那里运行良好。但是,当我在 JavaScript 中尝试它时,它会捕获 translateX 值,即 381,但不会捕获 translateY,即 -94。你知道为什么会这样吗?
regex101
https://i.stack.imgur.com/Nuj5X.png
JavaScript 执行
console.log(/translateX\((?<X>-{0,1}\d+)px\)|translateY\((?<Y>-{0,1}\d+)px\)/g.exec("translateX(381px) translateY(-94px)"));
使用matchAll 会得到相同的结果。
JavaScript 匹配所有
console.log("translateX(381px) translateY(-94px)".matchAll(/translateX\((?<X>-{0,1}\d+)px\)|translateY\((?<Y>-{0,1}\d+)px\)/g).next().value.groups);
【问题讨论】:
-
考虑将问题中使用的 JS 添加为 minimal reproducible example?
-
仅供参考,
{0,1}通常写成?表示可选模式。 -
在最后一个例子中你只调用了一次
.next(),所以你只能得到第一个匹配。尝试将其转换为数组,您将获得所有匹配项。
标签: javascript regex string