随着现代 Web 应用的发展,JavaScript 在前端开发中变得越来越重要,正则表达式在 JavaScript 中的应用也随之变得更加普遍。在 ECMAScript 2019 或 ES10 中,JavaScript 引入了一系列正则表达式扩展,使得开发人员能够更加方便地处理字符串。
RegExp 扩展
引入 s 修饰符
在早期版本的 JavaScript 中,点号(.)在正则表达式中表示匹配除换行符(\n)、回车符(\r)以外的任意字符。然而,在某些情况下,我们可能需要匹配包括这些字符在内的任意字符。在 ES10 中,引入了 s 修饰符来解决这个问题。s 修饰符使得点号可以匹配包括换行符、回车符在内的任意字符。
例如,以下代码将会匹配字符串中所有的字符,包括换行符:
const pattern = /./s; const str = 'hello\nworld'; console.log(str.match(pattern)); // 输出 ["h", "e", "l", "l", "o", "\n", "w", "o", "r", "l", "d"]
引入后行断言
后行断言指的是通过 (?<=...) 正则表达式语法来实现的,表示要匹配的字符串为 ... 前面的字符串。
例如,以下代码将会匹配所有以 "ES" 开头的字符串后面的数字:
const pattern = /(?<=ES)\d+/; const str1 = 'ES6 is the latest version of ES'; const str2 = 'JS can also do some things like ES6'; console.log(str1.match(pattern)); // 输出 ["6"] console.log(str2.match(pattern)); // 输出 null
引入反向后行断言
反向后行断言指的是通过 (?<!...) 正则表达式语法来实现的,表示要匹配的字符串不在 ... 前面的字符串中。
例如,以下代码将会匹配所有不以 "ES" 开头的字符串后面的数字:
const pattern = /(?<!ES)\d+/; const str1 = 'ES6 is the latest version of ES'; const str2 = 'JS can also do some things like ES6'; console.log(str1.match(pattern)); // 输出 null console.log(str2.match(pattern)); // 输出 ["6"]
String 扩展
引入 trimStart() 和 trimEnd() 方法
在早期版本的 JavaScript 中,我们可以通过 trim() 方法来去除字符串首尾的空格。在 ES10 中,引入了两个新的方法,分别为 trimStart() 和 trimEnd()。这两个方法分别用于去除字符串的开头和结尾的空格,其语法与 trim() 方法类似。
例如,在以下代码中,我们可以使用 trimStart() 和 trimEnd() 方法来去除字符串开头和结尾的空格:
const str = ' ES10 is awesome! '; console.log(str.trimStart()); // 输出 "ES10 is awesome! " console.log(str.trimEnd()); // 输出 " ES10 is awesome!"
引入 matchAll() 方法
matchAll() 方法用于在字符串中查找所有符合正则表达式的子串,并返回一个迭代器,我们可以通过迭代器来访问每一个匹配结果。
例如,在以下代码中,我们可以使用 matchAll() 方法查找字符串中所有的数字,并通过 for...of 语句来遍历匹配结果:
const pattern = /\d+/g; const str = 'ES6 and ES10 are two latest versions of JavaScript'; const matches = str.matchAll(pattern); for (const match of matches) { console.log(match[0]); } // 输出 "6" // 输出 "10"
总结
通过 ES10 中新增加的正则表达式扩展,我们可以更加方便地处理字符串。s 修饰符使得点号可以匹配包括换行符、回车符在内的任意字符,后行断言和反向后行断言使得我们可以更加方便地匹配字符串中特定的子串。同时,引入 trimStart()、trimEnd() 和 matchAll() 方法使得我们在处理字符串时更加高效和灵活。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64506fa8980a9b385b97a5b2