javascript - 在正则表达式中使用 '|' 运算符时确定匹配的子模式

标签 javascript regex

我有一个正则表达式,它由一个“|”(又名 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/

相关文章:

ANSI 格式的 JavaScript CSV 文本下载 (Windows-1252)

javascript - 如果在 Node js 中使用 mysql 发生错误,如何在 Node js 中回滚函数

java - 查找函数的正则表达式

php - 仅返回空格前的数字

regex - 使用 sed/regex/bash 脚本修改版本字符串

regex - 如何在ElasticSearch中的URL上执行RegExp查询?

javascript - 用 for 替换 jQuery each

javascript - Discord.JS 排行榜

javascript - 将 mocha+chai 与 co 一起使用

javascript - 如何简化针对多个正则表达式的字符串测试