在前四篇中,我们已经探讨了 ES6 在模板字符串、新字符串方法、Unicode 支持以及字符串的解构赋值和迭代方面的新增特性。本篇将重点介绍 ES6 对正则表达式的改进和 String.raw() 方法。
正则表达式的改进
ES6 对正则表达式也做了一些重要的增强,使其更加强大和灵活。
1. u 修饰符
ES6 引入了 u(Unicode)修饰符,用于正确处理大于 \uFFFF 的 Unicode 字符。
let s = "𠮷";
console.log(/^.$/.test(s)); // 输出: false(无法匹配)
console.log(/^.$/u.test(s)); // 输出: true(正确匹配)
2. y 修饰符
y 修饰符(“粘连”修饰符)确保匹配必须在目标字符串的当前位置发生。
let s = "aaa_aa_a";
let r1 = /a+/g;
let r2 = /a+/y;
console.log(r1.exec(s)[0]); // 输出: "aaa"(全局匹配)
console.log(r2.exec(s)[0]); // 输出: "aaa"(粘连匹配)
console.log(r1.exec(s)[0]); // 输出: "aa"(全局匹配的下一个匹配)
console.log(r2.exec(s)); // 输出: null(没有粘连的下一个匹配)
String.raw()
String.raw() 是 ES6 新增的一个方法,它用于获取一个模板字符串的原始字符串形式,即忽略转义字符。
示例
let rawStr = String.raw`This is a text with \n new line`;
console.log(rawStr); // 输出: "This is a text with \n new line"(\n 被视为普通字符)
使用场景
u修饰符:在处理含有辅助平面(超过\uFFFF)字符的字符串时非常有用,特别是在多语言环境中。y修饰符:适用于需要“锚定”匹配结果位置的场景,如令牌解析器或更复杂的字符串解析任务。String.raw():在处理需要展示原始字符串数据的场合,比如显示源代码或解析转义字符时非常有用。
注意事项
- 正则表达式中的
u和y修饰符可能不被所有 JavaScript 环境支持,特别是一些旧的浏览器和环境。 String.raw()的主要用途是处理字符串字面量,它并不适用于已存在的普通字符串变量。
ES6 对字符串和正则表达式的这些改进,使得 JavaScript 在文本处理方面的能力更上一层楼。这些新特性使得开发者可以以更加简洁和高效的方式编写处理字符串的代码。