如何使用 ES9 中的正则表达式命名捕获组

阅读时长 6 分钟读完

在 ES9 (ECMAScript 2018) 中,正则表达式捕获组引入了一个新的语法,即“命名捕获组”,它可以让开发者通过名称来引用捕获的子串,这在某些场景下会非常有用,比如数据校验、字符串解析等等。

什么是命名捕获组

在传统的正则表达式中,常常使用圆括号 () 来将一部分模式进行捕获,然后再通过编号来引用这个捕获的子串。例如:

上述代码中,(\w+)(\w+) 就是捕获组,分别对应上述正则表达式的第一个和第二个子表达式,通过索引可以得到它们捕获的子串。

而在命名捕获组中,我们可以使用语法 (?'name'pattern) 来给捕获组命名,其中 name 就是给这个捕获组起的名字,而 pattern 则是与这个捕获组匹配的正则表达式。例如:

上述代码中,(?<greeting>\w+)(?<name>\w+) 就是命名捕获组,分别对应捕获 HelloWorld 这两个子串,通过 .groups 属性可以访问到它们。

值得注意的是,正则表达式的“命名捕获组”语法是以 (?<name> 开头的,其中 name 可以随意替换成任何有效的标识符,但需要注意不要和其他模式匹配。比如 (?'name'(?<name=>"hello" 等都是无效的语法。

如何使用命名捕获组

在实际开发中,命名捕获组常常用于数据校验、字符串解析等场景。例如,假设我们需要解析一个 URL,获取其中的协议、域名、路径等信息,我们可以使用正则表达式来实现:

-- -------------------- ---- -------
----- ---------- - -----------------------------------------------------------------------------

-------- ------------- -
  ----- ----- - ---------------------
  -- -------- -
    ----- --- -------------- ------
  -
  ------ -
    --------- ----------------------
    ----- ------------------
    ----- ----------------- -- ---
    ----- ----------------- -- ----
  --
-

---------------------------------------------------------------------------
------------------------------------------------------------
---------------------------------------------------------------

在上述代码中,我们定义了一个正则表达式 urlPattern,它包含了四个命名捕获组 protocolhostportpath,然后使用 exec 方法来匹配字符串并获取捕获的内容。最后,我们根据捕获的结果,生成一个包含协议、域名、端口、路径等信息的对象返回。

通过这个例子,我们可以发现命名捕获组在字符串解析、数据校验等场景中非常有用,它可以提升代码的可读性、可维护性和复用性。

示例代码

下面是一些使用命名捕获组的示例代码,供读者参考学习。

示例 1:校验邮箱地址格式

-- -------------------- ---- -------
----- ------------ - ------------------------------------------------------------------

-------- -------------------- -
  ----- ----- - -------------------------
  -- -------- -
    ----- --- -------------- ----- ----------
  -
  ------ -
    --------- ----------------------
    ------- --------------------
    ---------- -----------------------
  --
-

--------------------------------------------------
---------------------------------------------------------
--------------------------------------------

示例 2:提取 Markdown 标题

-- -------------------- ---- -------
----- --------- - ---------------------------------------------------

-------- ----------------- -
  ----- ------ - ---
  --- ------
  ----- ------- - -------------------- -
    -------------
      ------ --------------------------
      ------ -------------------
    ---
  -
  ------ -------
-

---------------------------- ----------- ------------ ------------

示例 3:格式化时间字符串

-- -------------------- ---- -------
----- ---------------- - ----------------------------------------------- ------------------------------------------------------------

-------- --------------------- -
  ----- ----- - ---------------------------------
  -- -------- -
    ----- --- -------------- --------- ---------
  -
  ----- - ----- ------ ---- ----- ------- ------ - - -------------
  ------ ------------------------ -------------------------- -- -------
-

------------------------------------------------
---------------------------------- ---------

总结

本文介绍了 ES9 中的正则表达式命名捕获组语法,包括命名捕获组的基本语法、使用方法和示例代码。命名捕获组可以提升代码的可读性、可维护性和复用性,特别适用于字符串解析、数据校验等场景。希望读者通过本文的介绍和示例代码,掌握命名捕获组的使用方法,并在实际开发中灵活应用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646450a3968c7c53b0531c6e

纠错
反馈