正则表达式是在前端领域和其他编程领域中都广泛应用的重要工具。ECMAScript 2015(ES6)中加入了一些新的特性,使得在 JavaScript 中使用正则表达式变得更加强大和方便。本文将介绍在 ECMAScript 2015 中如何使用正则表达式,并提供一些示例代码。
基本语法
在 ECMAScript 2015 中,使用正则表达式的方式基本上和以前一样。你可以使用正则表达式字面量表示法(/pattern/flags
)或者 RegExp 对象来创建一个正则表达式。
其中 pattern
表示正则表达式的模式,flags
表示正则表达式的标识符。常用的标识符有 i
(表示不区分大小写)、g
(表示全局搜索)和 m
(表示多行搜索)等。例如:
// 使用正则表达式字面量表示法创建一个正则表达式 const pattern = /hello/i; // 使用 RegExp 对象创建一个正则表达式 const regexp = new RegExp("hello", "i");
注意,正则表达式的模式需要用斜杠 /
包围起来,但是标识符则不需要。如果你需要使用斜杠作为模式的一部分,可以使用反斜杠 \
进行转义。
新特性
在 ECMAScript 2015 中,正则表达式引入了一些新的特性,包括 sticky
属性、y
标识符、命名捕获组、非捕获组等。
sticky 属性
sticky
属性是正则表达式对象的一个只读属性,用于判断正则表达式是否匹配目标字符串的起始位置。如果 sticky
属性为 true
,则表示下一次搜索的起始位置应该是上一次匹配的位置后一个字符。如果 sticky
属性为 false
,则表示搜索会从字符串的任意位置开始。
const pattern = /\d+/y; console.log(pattern.sticky); // true console.log(pattern.test("123")); // true console.log(pattern.test("abc123")); // 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
方法来尝试在字符串中匹配该正则表达式,并输出捕获到的内容。我们可以看到,使用命名捕获组后,我们可以通过名称来获取捕获到的内容,比使用索引更直观。
非捕获组
在正则表达式中,如果将 ()
中的表达式以 ?:
开头,就可以创建一个非捕获组。与普通捕获组不同的是,非捕获组在匹配成功后不会被保存在结果数组中。
const pattern = /(?:\d{4})-(\d{2})-(\d{2})/; const str = "2022-03-11"; const result = pattern.exec(str); console.log(result[0]); // "2022-03-11" console.log(result[1]); // "03" console.log(result[2]); // "11"
在上面的示例中,我们使用了一个非捕获组来匹配日期字符串中的月份和日期,可以发现只有索引为 1 和 2 的位置保存了捕获到的内容。
示例代码
下面是一些示例代码,演示了在 ECMAScript 2015 中如何使用正则表达式:
-- -------------------- ---- ------- -- ---------------------- ----- ------- - --------- -- -- ------ ----------- ----- ------ - --- --------------- ----- -- -- ------ --- - --- ----- -------- - ------- ----------------------------- -- ---- ---------------------------------- -- ---- ------------------------------------- -- ----- -- ------- ----- -------- - ----------------------------------------------- ----- --- - ------------- ----- ------ - ------------------- -------------------------------- -- ------ --------------------------------- -- ---- ------------------------------- -- ---- -- ------ ----- -------- - ---------------------------- ----- ---- - ------------- ----- ------- - -------------------- ------------------------ -- ---- ------------------------ -- ----
总结
在 ECMAScript 2015 中,使用正则表达式变得更加强大和方便。我们可以使用 sticky
属性和 y
标识符控制正则表达式的搜索起始位置,使用命名捕获组来清晰地获取捕获到的内容,使用非捕获组来过滤掉不必要的内容。掌握这些新特性可以让我们更加方便地使用正则表达式,提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cf0fccb5eee0b525688e09