正则表达式一直是前端开发中不可或缺的重要技能,它能够帮助我们更方便地处理字符串匹配和替换操作。在 ECMAScript 2018 中,正则表达式得到了一些令人激动的新特性,我们来一起了解一下。
Unicode 属性转义
在旧版 ECMAScript 中,我们只能使用字符集来匹配某些类别的字符,例如 [a-z]
匹配小写字母。而在 ECMAScript 2018 中,我们可以使用 Unicode 属性转义 \p{}
来更方便地匹配 Unicode 属性。
例如,要匹配所有带有点的字符可以这样写:
const str = "Ͱข.yͰขab"; const regexp = /\p{P}/gu; console.log(str.match(regexp)); // Output: [".", ".", ".", "."]
我们使用 \p{P}
来匹配任何 Unicode 属性为标点符号的字符。在例子中,我们匹配到了字符串中所有的点。
还有许多其他的 Unicode 属性可以使用,例如 \p{Letter}
匹配任何字母字符,\p{Number}
匹配任何数字字符等等。
后行断言
在 ECMAScript 2018 中,我们可以使用后行断言来更方便地匹配某些字符,而不用考虑它们前方的字符。
例如,如果我们想要匹配某个字符串后面紧跟着数字的情况,我们可以这样写:
const str = "foo123"; const regexp = /(?<=foo)\d+/; console.log(str.match(regexp)); // Output: ["123"]
在这里,我们使用后行断言 (?<=foo)
来匹配数字前面的 foo
。
命名捕获组
在 ECMAScript 2018 中,我们可以使用命名捕获组来更方便地获取匹配到的字符串。
例如,如果我们想匹配并捕获某个字符串中的日期和时间信息,我们可以这样写:
-- -------------------- ---- ------- ----- --- - ------ -- ---------- ----------- ----- ------ - --------------------------------------------- -------------------------------------------------- ----- ----- - ------------------ -------------------------- -- ------- - ----- ------- ------ ----- ---- ----- ----- ----- ------- ----- ------- ---- - --
在这里,我们使用命名捕获组 (?<name>exp)
来获取匹配到的时间信息。结果会被储存在 match.groups
中,我们可以轻松地获取这些信息。
负向环视
在 ECMAScript 2018 中,我们可以使用负向环视来更方便地排除一些字符串。
例如,如果我们想匹配某个字符串,但是排除掉其中某个特定的字符,我们可以这样写:
const str = "Hello world!"; const regexp = /(?<!o)l/g; console.log(str.match(regexp)); // Output: ["l", "l"]
在这里,我们使用负向环视 (?<!o)
来排除包含 o
的情况。结果只匹配到了 l
字符。
总结
以上是 ECMAScript 2018 中正则表达式的新特性:Unicode 属性转义、后行断言、命名捕获组和负向环视。这些新特性使得正则表达式更加强大和灵活,可以让我们更方便地处理字符串操作。
如果你想深入地学习正则表达式,这些新特性也值得你去尝试和掌握。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c7278b10032fedd390a45b