正则表达式在前端开发中是一个非常重要的知识点。ES11 为正则表达式引入了一些新的标志和功能,本文将为您详细介绍 ES11 的正则表达式标志和局限性。
ES11 的正则表达式标志
1. s 标志
在以前,点号(.)不能匹配换行符(\n)。现在,如果在正则表达式中增加 s 标志,点号(.)就可以匹配换行符(\n)了。
const str = `hello world`; const regex = /hello.world/s; console.log(regex.test(str)); // true
2. d 标志
在以前,点号(.)可以匹配任何字符,但是不能匹配四个字节的 UTF-16 字符。现在,如果在正则表达式中增加 d 标志,点号(.)就可以匹配四个字节的 UTF-16 字符了。
-- -------------------- ---- ------- ----- --- - ----- ----- ----- - ----- ----------------------------- -- ----- ----- ------ - ------ ------------------------------ -- ----
3. y 标志
y 标志表示粘连匹配(sticky matching),即从目标字符串的当前位置开始匹配。
const str = 'hello world'; const regex = /world/y; console.log(regex.test(str)); // false console.log(regex.test(str)); // true
ES11 的正则表达式局限性
1. 并行匹配
在以前的版本中,正则表达式匹配的是串行的文本,也就是只能从一个匹配到的位置继续向下匹配。ES11 引入了并行匹配,允许同时从多个位置匹配同一种模式。
const str = 'hello world'; const regex = /l(?<=e.)(?<!l)/s; console.log(str.matchAll(regex)); // [ { }, { } ]
2. 零宽断言不支持数字量词
ES11 的零宽断言(lookaround)并不支持数字量词。比如,/(?<!\d+)\d*/ 是不被支持的正则表达式,而/(?<!\d)\d*/ 是被支持的。
总结
ES11 引入了一些有用的正则表达式标志和功能,但也存在一些局限性。在使用正则表达式时,需要根据具体的情况来选择是否使用 ES11 的新特性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b263aa48841e9894e9fd0d