我需要匹配一个表达式并使用命名组从中提取值。
假设这是我的字符串:
var str = 'element=123'
所以我想使用正则表达式匹配它并提取元素和值。
我知道如何在C#中做到这一点,现在正在尝试在JS中解决它。
这是我的正则表达式:
new RegExp(/^(<element>[A-Za-z0-9])+=[A-Za-z0-9]+$/);
我做错了什么?
我需要匹配一个表达式并使用命名组从中提取值。
假设这是我的字符串:
var str = 'element=123'
所以我想使用正则表达式匹配它并提取元素和值。
我知道如何在C#中做到这一点,现在正在尝试在JS中解决它。
这是我的正则表达式:
new RegExp(/^(<element>[A-Za-z0-9])+=[A-Za-z0-9]+$/);
我做错了什么?
现在,通过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)可用。
您需要使用编号组。
例如:
var myregex = /([^=]+)=(.*)/;
var matchArray = myregex.exec(yourString);
if (matchArray != null) {
element = matchArray[1];
id = matchArray[2];
}
选项2:XRegExp
JavaScript的替代正则表达式库XregexP支持命名捕获和其他JS正则表达式缺失的重要功能,例如后顾。