我想匹配正则表达式 /(a).(b)(c.)d/
与 "aabccde"
,并获取以下信息:
"a" at index = 0
"b" at index = 2
"cc" at index = 3
我怎样才能做到这一点? String.match 返回匹配列表和完整匹配开始的索引,而不是每个捕获的索引。
编辑:一个不适用于普通 indexOf 的测试用例
regex: /(a).(.)/
string: "aaa"
expected result: "a" at 0, "a" at 2
注意:问题类似于 Javascript Regex: How to find index of each subexpression? ,但我无法修改正则表达式以使每个子表达式成为捕获组。
原文由 user1527166 发布,翻译遵循 CC BY-SA 4.0 许可协议
目前有一个 建议(第 4 阶段)在本机 Javascript 中实现它:
这是事情如何运作的一个例子。以下片段至少在 Chrome 中运行没有错误:
因此,对于问题中的代码,我们可以这样做:
输出:
请记住
indices
数组包含匹配组 相对于字符串开头 的索引,而不是相对于匹配开头的索引。此处 提供了一个 polyfill。