JavaScript:命名捕获组

12

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

假设这是我的字符串:

var str = 'element=123'

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

我知道如何在C#中做到这一点,现在正在尝试在JS中解决它。

这是我的正则表达式:

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

我做错了什么?


2
https://dev59.com/qm435IYBdhLWcg3whQc5 - trainoasis
如果您在字符串“str”上有一个固定的模式,那么您可以使用split('=')将键和值分别读取出来。例如,str.split('=')[0],str.split('=')[1];这是一个简短的方法,如果您想避免正则表达式的话。 - foo-baar
2个回答

35

现在,通过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

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

编辑:命名捕获组现在已经实现在主流的浏览器中,并且自Chrome 62 (2018)、Firefox 78 (2020)和Safari 11.3 (2018)可用。


6

JavaScript不支持命名捕获组。

您需要使用编号组。

例如:

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

} 

选项2:XRegExp

JavaScript的替代正则表达式库XregexP支持命名捕获和其他JS正则表达式缺失的重要功能,例如后顾。


15
过时的回答。 - Giorgio Robino
不,它并不过时 - 尽管 JS 技术上支持命名捕获组,但许多主要浏览器仍然不支持。 - sevenseacat
1
是的,它已经过时了。即使某些浏览器不支持,JavaScript语言仍支持命名捕获组。目前,只有IE不支持此功能。请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp上的兼容性图表。 - Corey
2
如果以前不支持,现在已经支持了:https://caniuse.com/?search=named%20capture - wils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接