正则表达式作为字符串处理的重要工具,一直是前端编程中不可替代的一部分。
在 ES6 之前,JavaScript 采用的正则表达式引擎大致有两种:BRE(Basic Regular Expressions)和ERE(Extended Regular Expressions),它们都有自己的语法和特性。
随着 JavaScript 的发展,正则表达式终于得到了改进。ES6 中,引入了一些新的功能,如后行断言、Unicode 属性转义等。而在 ES2018 和 ES2019 中,正则表达式又得到了进一步的增强。
ES2018 中的正则表达式
dotAll 模式
在默认模式下,. 通配符表示除了换行符外的任意字符。但是在某些场合下,我们需要 . 匹配所有字符,包括换行符。
ES2018 引入了 dotAll 模式,可以让 . 匹配所有字符。需要使用 s 标记表示。
----- -- - --------------- ------------------------------------- -- ----
向前查找
正则表达式中,通过(?=pattern)或(?!pattern)的形式表示向前查找或向前否定查找。
在 ES2018 中,向前查找得到了改进,可以在查找之前加入一个确定的字符串。需要使用 ?<= 或 ?<! 表示。
----- -- - -------------- ------------------------------- -- - ------- ------ -- ------ --------- ------- --------- -
Rest 参数捕获
在正则表达式中,我们可以使用捕获组(Capture Groups)来捕获匹配到的内容。而在 ES2018 中,引入了 Rest 参数捕获功能,可以将所有捕获组的内容捕获到一个数组中。
----- -- - -------------------------- ------------------------------------ -- - ------------- ------- ----- ----- ------ -- ------ ------------- ------- --------- -
可以看到,不仅匹配到了整个字符串,还分别捕获了年、月、日的内容。而如果我们使用 Rest 参数捕获功能,可以将这些内容放到一个数组中。
----- -- - -------------------------- ----- ------- -------- - ----------------------- ------------------ -- - ------- ----- ---- -
ES2019 中的正则表达式
Unicode 转义
在 ES6 中,正则表达式已经加入了 Unicode 属性转义功能。在 ES2019 中,加入了更方便的 Unicode 转义功能。
我们可以使用 \u{n} 或 \u{nnnnn} 的形式表示 Unicode 的字符,其中 n 为 0-9 的数字,nnnnn 为 Unicode 编码,最多可以表示 6 个十六进制数字。
----- -- - ------------- --------------------------- -- ----
RegExp.prototype.{Symbol.matchAll}
在 ES6 中,String.prototype.matchAll 方法已经被引入,可以返回一个迭代器,用于遍历所有匹配的内容。
在 ES2019 中,RegExp 对象也加入了一个新的属性,即 RegExp.prototype.{Symbol.matchAll},具有相同的功能。
----- -- - ------- ----- --- - ---- --- ------- ----- ----------- - ------------------------- --- ---- ----- -- ------------ - ------------------- - --- - - ------ ------ -- ------ ---- --- ------- ------- --------- - - - ------ ------ -- ------ ---- --- ------- ------- --------- - --
总结
ES2018 和 ES2019 中的正则表达式带来了更强大、更方便的功能,使得正则表达式的编写变得更加灵活和高效。
掌握这些新特性,可以帮助我们更好地处理字符串数据,提高代码的效率和质量。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64c8aa2a5ad90b6d041456c5