Javascript: 命名捕获组

33 浏览
0 Comments

Javascript: 命名捕获组

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

假设这是我的字符串:

var str = 'element=123'

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

我知道如何在c#中做到这一点,现在我正在尝试在JS中解决这个问题。

这是我的正则表达式:

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

我做错了什么?

0
0 Comments

JavaScript不支持命名捕获组,只能使用数字组。要解决这个问题,可以使用XRegExp库来支持命名捕获组,该库还支持其他JS正则表达式缺失的重要功能,如后顾断言。过去有人认为这个问题已经过时,但实际上只有IE浏览器不支持命名捕获组,其他主要浏览器仍然存在这个问题。可以参考Mozilla开发者文档中的兼容性表格来查看各浏览器的支持情况。可以使用caniuse网站来查看最新的支持情况。

0
0 Comments

ES2018引入了正则表达式的命名捕获组,这使得在JavaScript中使用命名捕获组成为可能。这种特性在Chrome 64中已经可用,并且很快也会在Safari中可用。

以下是一个在Chrome 64中已经可以工作的示例:

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

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

0