Javascript:命名捕获组

时间:2014-07-21 06:53:10

标签: javascript regex

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

让我们说这是我的字符串:

var str = 'element=123'

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

我知道如何做到这一点是c#,我想在JS中弄明白。

这是我的正则表达式:

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

我做错了什么?

2 个答案:

答案 0 :(得分:7)

JavaScript不支持命名捕获组。

您必须使用编号组。

例如:

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

} 

选项2:XRegExp

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

答案 1 :(得分:6)

现在,使用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