正则表达式在ECMAScript5中经历了一些变化,包括正则表达式字面量的改变。下面就来一一讲解这些变化。
1. y标志符
在ECMAScript5中,正则表达式字面量新增了一个y标志符,表示执行“粘性”匹配。它指定了从目标字符串的当前位置开始匹配,并且只查找从该位置开始的匹配项。这和全局匹配(g标志符)不同,全局匹配会查找整个字符串中的所有匹配,而不仅仅是从当前位置开始。
示例1:
const str = 'abc123abc';
const regex = /ab/y;
console.log(regex.test(str)); // true
console.log(regex.lastIndex); // 2
console.log(regex.test(str)); // false
console.log(regex.lastIndex); // 0
console.log(regex.test(str)); // true
第一次执行regex.test(str)返回true,说明str中存在以'ab'开头的字符串。同时,regex.lastIndex的值被修改为2,表明下一次匹配应该从字符串的第3个位置开始。第二次调用regex.test(str)返回false,因为正则表达式要求从当前位置开始匹配,而当前位置不是以'ab'开头,所以第二次匹配失败。此时regex.lastIndex被重置为0,即下一次匹配应该从字符串的第一个位置开始。最后一次调用regex.test(str)又返回true,因为字符串'ab'又出现在了第一个位置。
2. u标志符
在ECMAScript6中,新增了一个u标志符表示正则表达式支持Unicode字符集。
示例2:
const str = 'es6新特性\uD83D\uDE00';
console.log(str.length); // 10
console.log(/^.$/.test(str)); // false
console.log(/^.$/u.test(str)); // true
从以上示例中可以看出,字符串str的长度为10,因为其中包含了一个Unicode表情。而普通的正则表达式并不能正确地将这个表情字符当作一个字符来匹配。但是,使用u标志符后,正则表达式会将所有Unicode字符都视为一个字符,正确地进行匹配。
除此之外,正则表达式字面量的另一个改变是,使用反斜杠字符(\)来表示特殊字符时可以不必进行二次转义。例如,要匹配一个反斜杠字符,可以使用 /\/,或者使用/\/。
以上就是正则表达式字面量在ECMAScript5中的变化的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:正则表达式字面量在ECMAScript5中的变化 - Python技术站