我试图在JavaScript中创建一个命名的match正则表达式,它从多行字符串中捕获构建信息。它在regex101中测试良好,但在JavaScript中无法在exec的单次传递中正确匹配。
当我在JavaScript中尝试下面的正则表达式时,所有匹配的都是第一个匹配,即。其他所有内容都显示为undefined
。
当我在www.example.com测试以下内容时regex101.com
/(BuildTimestamp:)(?<timestamp>.*)|(VersionCode:)(?<major>.*)|(VersionName:)(?<minor>.*)/gm
BuildTimestamp:30-May-2023 14:25\r\n
VersionCode:6\r\n
VersionName:.0.5\r\n
我得到以下匹配:
timestamp: 30-May-2023 14:25
major: 6
minor: .0.5
在JavaScript中,我正在执行以下操作:
const regex = /(BuildTimestamp:)(?<timestamp>.*)|(VersionCode:)(?<major>.*)|(VersionName:)(?<minor>.*)/gm;
const match = regex.exec(contents);
如果我把exec
放在一个循环中,我就可以在调用exec
时依次捕获每个命名匹配。我希望有一种方法可以修改正则表达式查询,以便一次性捕获所有这些变量。
第一次匹配的结果如下
2条答案
按热度按时间ffvjumwh1#
以下内容应该是不言自明的。我刚刚将
\r?\n
添加到正则表达式中,然后使用返回值的groups
属性。ejk8hzay2#
可以使用
String.prototype.matchAll()
:或者,您可以修改正则表达式以一次性匹配所有内容。如果不想捕获
\r\n
序列,您可能希望进一步调整正则表达式: