我有一个正则表达式,它由一个“|”(又名 OR 运算符)拼凑而成,它由更小的子模式组成。我试图确定哪个子模式匹配,但 RegExp 引擎只会给我整个表达式。
例子:
这是我编译的(近似的)拼凑的表达式(为了理解而大大简化了:
/^somestring-(\w+)$|^notherstring-(\d+)-(\w+)$|^laststring-(\w+)-([a-f])$/g
这是输入文本:
laststring-eof
所以在我的 matches 数组中,我看到了一些具有“未定义值”的索引(因为之前有几次尝试的匹配不匹配整个表达式),但我也得到了我的匹配“eof”。
这一切都很棒,给了我大部分我想要的东西。我没有得到我需要的是知道匹配的子模式是“^laststring-(\w+)$”,或者至少知道这是第三个子模式主要表达。我不能依赖匹配数组的长度,因为每个子模式可以有不定数量的匹配组。
我试过 regexp.lastIndex,但该属性只给出了子模式中的最后一个匹配项,而不是整个表达式中子模式的偏移量。
最佳答案
我不确定这是否可行,但我认为如果您在每个子组周围放置 () 括号,您应该能够在表达式匹配时检查其中哪些是非空的,这样您可以看到哪个模式匹配。
在您的情况下,这将创建 3 个额外的子组,如果我计算正确,它将是这样的:
第一组=第一个子模式
第二组=第一个子模式中的第一个匹配组
第三组 = 第二个子模式
第四组和第五组=第二个子模式中的子模式
第六 = 第三子组
所以你检查第一个、第三个和第六个匹配组,其中一个是非空的,这就是你的匹配模式。
关于javascript - 在正则表达式中使用 '|' 运算符时确定匹配的子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057780/