正则表达式一直是前端开发中不可或缺的一部分,它可以帮助您匹配和处理字符串。ES7 标准引入了三个新的修饰符来改善正则表达式的功能。在本篇文章中,我们将深入研究这三个修饰符,了解它们如何工作以及如何使用它们来使我们的代码更加高效。
1.修饰符 y
修饰符 y 被称为"黏性"修饰符,它让正则表达式尝试从上次匹配的位置继续匹配。这意味着,它只会匹配一个字符串中的连续字符。
let str = 'aaa_aa_a'; let regex = /a+/y; console.log(regex.exec(str)); // ["aaa"] console.log(regex.exec(str)); // ["aa"] console.log(regex.exec(str)); // null
在上面的代码中,正则表达式只匹配了字符串的前三个字符,因为它在第四个字符"/_"的位置停止了。在第二个执行中,它在第五个字符 "a " 的位置开始了下一次匹配,所以只匹配了第五和第六个字符" aa " 。在第三次执行中,它返回 null ,因为没有找到匹配。
2.修饰符 u
在 JavaScript 中,字符串是以 UTF-16 格式存储的,可以处理 16 位字符。但是,某些字符需要使用超过 16 位的 Unicode 码点来表示。使用当然的正则表达式处理这些字符时,它只会匹配前 16 位字符,而不是整个字符。ES7 引入了修饰符 u 来修复这个问题。
let s = '𠮷'; console.log(/^.$/.test(s)); // false console.log(/^.$/u.test(s)); // true
在上面的代码中,我们试图匹配一个字符串,它只由一个字符"𠮷"组成。使用 u 修饰符可以正常匹配,而不使用 u 则无法匹配。
3.修饰符 s
修饰符 s 用于打开“单行”模式。在这种模式下,点号 (.) 单个字符的匹配将包括换行符 (\n) 。
考虑下面的字符串:
let str = 'First line\nSecond line'; let regex = /First.*line/; console.log(regex.test(str)); // false
在上面的代码中,正则表达式想要匹配"First line"和 "line"之间的所有字符,在换行符之后停止匹配。但是,这并没有起作用。原因是默认的点号 "."不会匹配新行符。要解决这个问题,我们可以使用 s 修饰符。
let str = 'First line\nSecond line'; let regex = /First.*line/s; console.log(regex.test(str)); // true
在上面的代码中,我们使用 s 修饰符,使点号能够匹配新行符。正确地找到了我们要查找的字符串。
总结
ES7 引入的这三个修饰符可以帮助我们更好地处理不同类型的字符串。要使用这些修饰符,只需在正则表达式末尾添加修饰符所对应的字符。在 JavaScript 中,正则表达式是一项非常强大的特性。掌握这些修饰符将有助于您编写更高效和有效的 RegExp。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b496b968c7c53b0da1600