为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript正则表达式中命名捕获组?

/ 猿问

在JavaScript正则表达式中命名捕获组?

波斯汪 2019-08-19 10:54:56

在JavaScript正则表达式中命名捕获组?

据我所知,在JavaScript中没有名为捕获组的东西。获得类似功能的另一种方法是什么?



查看完整描述

3 回答

?
qq_笑_17

ECMAScript 2018将命名捕获组引入JavaScript正则表达式。

如果您需要支持旧浏览器,您可以使用正常(编号)捕获组执行所有操作,您可以使用命名捕获组执行操作,您只需要跟踪数字 - 如果您的捕获组的顺序可能很麻烦正则表达式的变化。

我能想到的命名捕获组只有两个“结构”优势:

  1. 在一些正则表达式中(.NET和JGSoft,据我所知),您可以在正则表达式中为不同的组使用相同的名称(有关这一事项的示例,请参阅此处)。但是大多数正则表达式都不支持这种功能。

  2. 如果您需要在数字包围的情况下引用编号的捕获组,则可能会出现问题。假设您想要为数字添加零,因此要替换(\d)$10。在JavaScript中,这将起作用(只要你的正则表达式中有少于10个捕获组),但Perl会认为你正在寻找反向引号10而不是数字1,然后是a 0。在Perl中,您可以${1}0在这种情况下使用。

除此之外,命名捕获组只是“语法糖”。仅在您真正需要时才使用捕获组,并(?:...)在所有其他情况下使用非捕获组。

使用JavaScript的更大问题(在我看来)是它不支持详细的正则表达式,这将使可读,复杂的正则表达式的创建更容易。

Steve Levithan的XRegExp库解决了这些问题。


查看完整回答
反对 回复 2019-08-19
?
MM们

您可以使用XRegExp,这是一种增强的,可扩展的,跨浏览器的正则表达式实现,包括对其他语法,标志和方法的支持:

  • 添加新的正则表达式和替换文本语法,包括对命名捕获的全面支持。

  • 添加两个新的正则表达式标志:s,使点匹配所有字符(也称为dotall或单行模式),以及x自由间距和注释(也称为扩展模式)。

  • 提供一系列功能和方法,使复杂的正则表达式处理变得轻而易举。

  • 自动修复正则表达式行为和语法中最常遇到的跨浏览器不一致性。

  • 允许您轻松创建和使用为XRegExp的正则表达式语言添加新语法和标志的插件。


查看完整回答
反对 回复 2019-08-19
?
慕运维8079593

另一种可能的解决方案:创建一个包含组名和索引的对象。

var regex = new RegExp("(.*) (.*)");var regexGroups = { FirstName: 1, LastName: 2 };

然后,使用对象键来引用组:

var m = regex.exec("John Smith");var f = m[regexGroups.FirstName];

这使用正则表达式的结果提高了代码的可读性/质量,但不提高了正则表达式本身的可读性。


查看完整回答
反对 回复 2019-08-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信