文章目录
- 修饰符 y
 - 修饰符 u
 
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
修饰符 y
与 g 类似,也是全局匹配,并且下一次匹配都是从上一次匹配成功结束位置开始(即上次匹配成功的字符串最后一个字符后面的位置),不同之处在于,g 修饰符只要剩余位置中存在匹配即可;而 y 修饰符要求剩余位置的第 1 个位置必须匹配成功,否则匹配失败,不管后面有没有符合正则式的内容,直接返回 null
var s = "abc_ab_a";
var r1 = /[a-z]+/g;
var r2 = /[a-z]+/y;
console.log(r1.exec(s),r1.lastIndex); // ["abc", index: 0, input: "abc_ab_a"] 3
console.log(r2.exec(s),r2.lastIndex); // ["abc", index: 0, input: "abc_ab_a"] 3
console.log(r1.exec(s),r1.lastIndex); // ["ab", index: 4, input: "abc_ab_a"] 6
console.log(r2.exec(s),r2.lastIndex); // null 0
 
正则表达式 r2,第一次成功匹配到字符串 abc,这个 abc 后面的位置是 3,这个就是正则表达式成功匹配的字符串的结束位置,也就是下次迭代匹配开始的位置(即剩余位置的第 1 个位置)。我们看到位置 3 对应的字符是 _,[a-z]+ 匹配失败了,那么就直接甩手不干了,直接返回 null,这脾气,暴躁!
修饰符 u
u 修饰符使得正则表达式可以正常匹配 4 个字节的字符。比如 “[emoji]” 字符是一个 4 字节字符,直接使用正则匹配将会失败,而使用 u 修饰符后,可以匹配成功,如下所示:
var s = "[emoji]";
console.log(/^.$/.test(s)); // false
console.log(/^.$/u.test(s)); // true
 
如上的代码中,. 表示匹配任意一个字符,除了换行符以外。