正则 ES2018,再也不需要正则大师!
2024-02-13 18:49:22
正则表达式 ES2018,让正则变得更简单
正则表达式是一个非常强大的工具,可以用来匹配字符串中的文本。它可以用来查找、替换和提取文本,还可以用来验证数据。正则表达式经常被用于编程中,但在文本编辑和数据处理中也有广泛的应用。
在 ES2018 中,正则表达式又新增了一些特性,这些特性让正则变得更加易用和强大。本文将全面解读正则表达式的新特性,包括匹配任意字符、匹配 Unicode 编码、匹配换行符和匹配非 Unicode 字符。读完后你将掌握正则表达式的精髓,并学会如何使用正则表达式来解决实际问题。
匹配任意字符
在以前的正则表达式中,如果想要匹配任意字符,只能使用 [\w\W] 这个正则表达式。这个正则表达式匹配所有 Unicode 字符,包括字母、数字、下划线和汉字。但是,这个正则表达式也有一个缺点,那就是它不能匹配换行符。
在 ES2018 中,新增了一个正则表达式 s (dotAll) Flag - . 可以匹配任意字符,包括换行符。这个正则表达式非常有用,因为它可以用来匹配多行文本中的内容。例如,我们可以使用这个正则表达式来匹配一个包含多行文本的字符串中的所有数字。
const text = "123\n456\n789";
const regex = /./s;
const result = text.match(regex);
console.log(result); // [ '1', '2', '3', '\n', '4', '5', '6', '\n', '7', '8', '9' ]
匹配 Unicode 编码
在以前的正则表达式中,如果想要匹配一个 Unicode 字符,只能使用 \u 后跟该字符的 Unicode 编码。例如,我们可以使用 \u4e2d 来匹配汉字 "中"。
在 ES2018 中,新增了一个正则表达式 u (unicode) Flag - \u{4e2d} 可以匹配 Unicode 字符,而无需使用 \u 后跟该字符的 Unicode 编码。这个正则表达式非常有用,因为它可以使正则表达式更加简洁和易读。例如,我们可以使用这个正则表达式来匹配一个包含多个 Unicode 字符的字符串中的所有汉字。
const text = "你好,世界!";
const regex = /\u4e2d/u;
const result = text.match(regex);
console.log(result); // [ '中' ]
匹配换行符
在以前的正则表达式中,如果想要匹配一个换行符,只能使用 \n。这个正则表达式只能匹配 Unix 风格的换行符,不能匹配 Windows 风格的换行符。
在 ES2018 中,新增了一个正则表达式 m (multiline) Flag - ^\n可以匹配任何风格的换行符。这个正则表达式非常有用,因为它可以使正则表达式更加健壮。例如,我们可以使用这个正则表达式来匹配一个包含多行文本的字符串中的所有行。
const text = "第一行\n第二行\n第三行";
const regex = /^/m;
const result = text.match(regex);
console.log(result); // [ '第一行', '第二行', '第三行' ]
匹配非 Unicode 字符
在以前的正则表达式中,如果想要匹配一个非 Unicode 字符,只能使用 [^\w\W] 这个正则表达式。这个正则表达式匹配所有非 Unicode 字符,包括控制字符和格式字符。但是,这个正则表达式也有一个缺点,那就是它不能匹配换行符。
在 ES2018 中,新增了一个正则表达式 u (unicode) Flag - \N{CONTROL} 可以匹配非 Unicode 字符,包括控制字符和格式字符。这个正则表达式非常有用,因为它可以使正则表达式更加健壮。例如,我们可以使用这个正则表达式来匹配一个包含非 Unicode 字符的字符串中的所有非 Unicode 字符。
const text = "hello\nworld\u0000";
const regex = /\N{CONTROL}/u;
const result = text.match(regex);
console.log(result); // [ '\u0000' ]
总结
本文全面解读了正则表达式 ES2018 的新特性,包括匹配任意字符、匹配 Unicode 编码、匹配换行符和匹配非 Unicode 字符。读完后你将掌握正则表达式的精髓,并学会如何使用正则表达式来解决实际问题。