Javascript:命名捕获组

use*_*158 4 javascript regex

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

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

var str = 'element=123'
Run Code Online (Sandbox Code Playgroud)

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

我知道如何做到这一点是c#,我试图在JS中解决它.

这是我的正则表达式:

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

我究竟做错了什么?

zx8*_*x81 8

JavaScript不支持命名捕获组.

您必须使用编号组.

例如:

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

} 
Run Code Online (Sandbox Code Playgroud)

选项2:XRegExp

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

  • 过时的答案。 (6认同)
  • 如果不是,那么现在就是:https://caniuse.com/?search=named%20capture (2认同)

Nux*_*Nux 8

现在,使用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
)
Run Code Online (Sandbox Code Playgroud)

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

Firefox尚未决定,但这是Mozilla问题追踪器中的一个条目:https : //bugzilla.mozilla.org/show_bug.cgi? id =1362154