【问题标题】:Javascript: Named Capture GroupsJavascript:命名捕获组
【发布时间】:2014-09-11 14:37:57
【问题描述】:

我需要匹配一个表达式并使用命名组从中提取值。

假设这是我的字符串:

var str = 'element=123'

所以我想使用正则表达式匹配它并提取元素和值。

我知道怎么做是c#,我正在尝试在JS中弄清楚。

这是我的正则表达式:

new RegExp(/^(<element>[A-Za-z0-9])+=[A-Za-z0-9]+$/);

我做错了什么?

【问题讨论】:

  • 如果你在字符串'str'上有一个set pattern,那么你可以使用slit by ('=')来分别读取key和value。例如str.split('=')[0] , str.split('=')[1]; , 如果你想避免正则表达式,只是一个简短的方法。

标签: javascript regex


【解决方案1】:

现在,在 ES2018 中,RegExp 命名的捕获组实际上是可能的。

这是一个已经在 Chrome 64 中运行的示例(即将在 Safari 中也可用)。

const isoDateExpression = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;

let match = isoDateExpression.exec('1999-12-31');
console.log(
    match.groups.year, // 1999
    match.groups.month, // 12
    match.groups.day, // 31
)

语法参考: https://github.com/tc39/proposal-regexp-named-groups

Firefox 还没有决定,但这里是 Mozilla 问题跟踪器中的一个条目: https://bugzilla.mozilla.org/show_bug.cgi?id=1362154

编辑:在 Firefox 78 和 Safari 11.1 中实现。

【讨论】:

    【解决方案2】:

    JavaScript 不支持命名捕获组。

    您必须使用编号组。

    例如:

    var myregex = /([^=]+)=(.*)/;
    var matchArray = myregex.exec(yourString);
    if (matchArray != null) {
        element = matchArray[1];
        id = matchArray[2];
    
    } 
    

    选项 2:XRegExp

    JavaScript XregexP 的备用正则表达式库支持命名捕获以及 JS 正则表达式中缺少的其他重要正则表达式功能,例如lookbehinds。

    【讨论】:

    • 谢谢,很高兴它有帮助! :)
    • 过时的答案。
    • 不,它并没有过时 - 尽管 JS 在技术上支持命名捕获组,但许多主流浏览器仍然不支持。
    • 是的,它已经过时了。 JavaScript 语言支持命名捕获组,即使某些浏览器不支持。目前,只有 IE 不支持此功能。请参阅developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 的兼容性图表
    猜你喜欢
    • 2014-06-26
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多