如何在 ECMAScript 2015 中使用正则表达式

阅读时长 8 分钟读完

正则表达式是在前端领域和其他编程领域中都广泛应用的重要工具。ECMAScript 2015(ES6)中加入了一些新的特性,使得在 JavaScript 中使用正则表达式变得更加强大和方便。本文将介绍在 ECMAScript 2015 中如何使用正则表达式,并提供一些示例代码。

基本语法

在 ECMAScript 2015 中,使用正则表达式的方式基本上和以前一样。你可以使用正则表达式字面量表示法(/pattern/flags)或者 RegExp 对象来创建一个正则表达式。

其中 pattern 表示正则表达式的模式,flags 表示正则表达式的标识符。常用的标识符有 i(表示不区分大小写)、g(表示全局搜索)和 m(表示多行搜索)等。例如:

注意,正则表达式的模式需要用斜杠 / 包围起来,但是标识符则不需要。如果你需要使用斜杠作为模式的一部分,可以使用反斜杠 \ 进行转义。

新特性

在 ECMAScript 2015 中,正则表达式引入了一些新的特性,包括 sticky 属性、y 标识符、命名捕获组、非捕获组等。

sticky 属性

sticky 属性是正则表达式对象的一个只读属性,用于判断正则表达式是否匹配目标字符串的起始位置。如果 sticky 属性为 true,则表示下一次搜索的起始位置应该是上一次匹配的位置后一个字符。如果 sticky 属性为 false,则表示搜索会从字符串的任意位置开始。

在上面的示例中,我们使用了 y 标识符创建了一个正则表达式对象,该对象的 sticky 属性为 true。我们先尝试在字符串 "123" 中搜索匹配该正则表达式的内容,结果为 true。接着我们在字符串 "abc123" 中再次搜索,结果为 false,这是因为该字符串的起始位置并不是上一个匹配的位置后一个字符。

y 标识符

y 标识符是 ECMAScript 2015 中新引入的一个标识符,用于创建一个只搜索目标字符串的起始位置的正则表达式。它和 g 标识符有些类似,但是 g 标识符会搜索整个字符串,而 y 标识符只会搜索从上一次匹配的位置之后的字符串。

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

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

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

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

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

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

在上面的示例中,我们首先定义了两个正则表达式。通过 exec 方法来尝试在字符串 "123abc" 中匹配该正则表达式,并输出结果和 lastIndex 属性的值。我们可以看到,使用 g 标识符时,lastIndex 属性的值每次都会变化,而使用 y 标识符时,lastIndex 属性的值只会在匹配成功后更新。

命名捕获组

在正则表达式中,我们可以使用 () 将一个或多个表达式包裹起来,形成一个捕获组。在 ECMAScript 2015 中,我们可以给捕获组指定一个名称,这样在匹配成功后可以通过名称来获取捕获到的内容。

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

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

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

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

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

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

在上面的示例中,我们首先定义了一个正则表达式,该表达式可以匹配由连字符分隔的日期字符串。接着,我们使用 exec 方法来尝试在字符串中匹配该正则表达式,并输出捕获到的内容。我们可以看到,使用命名捕获组后,我们可以通过名称来获取捕获到的内容,比使用索引更直观。

非捕获组

在正则表达式中,如果将 () 中的表达式以 ?: 开头,就可以创建一个非捕获组。与普通捕获组不同的是,非捕获组在匹配成功后不会被保存在结果数组中。

在上面的示例中,我们使用了一个非捕获组来匹配日期字符串中的月份和日期,可以发现只有索引为 1 和 2 的位置保存了捕获到的内容。

示例代码

下面是一些示例代码,演示了在 ECMAScript 2015 中如何使用正则表达式:

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

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

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

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

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

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

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

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

总结

在 ECMAScript 2015 中,使用正则表达式变得更加强大和方便。我们可以使用 sticky 属性和 y 标识符控制正则表达式的搜索起始位置,使用命名捕获组来清晰地获取捕获到的内容,使用非捕获组来过滤掉不必要的内容。掌握这些新特性可以让我们更加方便地使用正则表达式,提高代码的可读性和可维护性。

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

纠错
反馈