在 ECMAScript 2018 中,RegExp 基于命名捕获组(Named Capture Groups)增加了对正则表达式的支持。正则表达式一直是前端开发人员必须的重要技能之一。在 JavaScript 中,我们经常使用 RegExp 对字符串进行模式匹配。命名捕获组是一个新的、更简洁的方法,可以更容易地抓取 RegExp 匹配中的数据。
什么是命名捕获组?
命名捕获组是一个用于匹配文本模式的 RegExp。与常规捕获组不同,它可以通过名称标识每个匹配项,从而更方便地引用和操作它们。与捕获组相比,命名捕获组更简洁,更易读,更易于维护。
命名捕获组的语法如下所示:
(?<name>X)
该语法中,name
是捕获组的名称,X
表示要使用的模式表达式。其中(?<
和>)
是包含捕获组名称的特殊语句。
如何使用命名捕获组?
我们可以使用在 RegExp 中使用命名捕获组来提取我们感兴趣的信息,如下所示:
const str = 'hello this is a test string'; const regex = /(?<word>test)\s(?<word>string)/; const result = regex.exec(str)?.groups; console.log(result.word);
在这个例子中,我们将匹配 test string
并分别给它们命名为 word
。通过 groups
属性,我们可以安全地访问我们命名的捕获组并打印该结果的 word
属性,它将输出字符串 string
。
我们还可以使用命名捕获组来获取多个结果,如下所示:
const str = 'hello, i am mr. john doe, i am from england'; const regex = /(?<title>mr\.)\s(?<name>[A-Za-z]+)\s(?<lname>[A-Za-z]+),\s(?<info>.+)/; const result = regex.exec(str)?.groups; console.log(result.title, result.name, result.lname, result.info);
在这个例子中,我们使用命名捕获组从提取出 mr.
, john
, doe
和 i am from england
。通过 groups
属性,我们可以轻松地访问每个捕获组的名称。
给捕获组提供默认值
有时我们可能需要输入默认值以获取到我们需要的匹配项。在命名捕获组中,我们可以为每个捕获组设置默认值,如下所示:
const str = 'hello this is a test string'; const regex = /(?<word>test)\s(?<word2>string)?/; const result = regex.exec(str)?.groups; console.log(result.word, result.word2);
在这个例子中,我们为 word2
捕获组设置了默认值,即 undefined
。如果正则表达式未找到 word2
,则该值将保持其默认值。
总结
在 ECMAScript 2018 中,命名捕获组是一种方便的捕获和处理字符串的方式。它们使我们可以更方便地定义和引用捕获的组,而不必依赖于确定捕获组的索引。同时,命名捕获组还可以提高代码的可读性和可维护性。
如果你想深入学习命名捕获组,我们建议您去浏览 ECMAScript 2018 中更多详细的 规范文档 或者查看 MDN 上的更多示例和教程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c5c7e918bbf2b88c156b4b