5.1 RegExp构造函数
与es5相比,es6RegExp
函数支持第一个参数为正则表达式的同时,还能设置第二个参数,第二个参数设置的正则修饰符将会覆盖第一个参数中的正则修饰符
1 | /* 构造器方式 */ |
5.2 字符串的正则方法
在es6
中,字符串的四个与正则相关的方法全部会调用RegExp
对象定义的相应方法
字符串实例方法 | 被调用的RegExp 的方法 |
---|---|
String.prototype.match |
RegExp.prototype[Symbol.match ] |
String.prototype.replace |
RegExp.prototype[Symbol.replace ] |
String.prototype.search |
RegExp.prototype[Symbol.search ] |
String.prototype.split |
RegExp.prototype[Symbol.split ] |
5.3 u修饰符
比较点 | 场景 | 不带u修饰符 | 带u修饰符 |
---|---|---|---|
点字符(. ) |
(字符串中)当匹配目标码点 0xFFFF | 无法匹配 | 正确匹配 |
Unicode字符表示法(\u{} )– |
当做正则量词 | 正确识别– | |
量词({} ) |
(正则表达式中)跟在码点大于大于0xFFFF 的字符后面 |
无法识别 | 正确识别为量词 |
预定义模式 | (字符串中)当匹配目标码点 0xFFFF | 无法匹配 | 正确匹配 |
i 修饰符 |
(字符串中)当匹配目标为非规范的字符 | 无法匹配 | 正确匹配 |
5.4 y修饰符
粘连(sticky)修饰符:类似g
修饰符,会进行全文匹配,区别在于
g
修饰符每次都从lastIndex
属性开始,从这个位置开始往后搜索,发现匹配为止y
修饰符每次也从lastIndex
属性开始,从这个位置开始往后搜索,但要求在lastIndex
指定的位置就发现匹配,否则返回null
5.4.1 和 g 修饰符的区别
1 | const s = 'aaa_aa_a' |
5.4.2 从字符串提取 tokeb (词元)
说明:根据y
修饰符粘连
的特性,可以利用这一点敏感地识别到提取词元过程中是否有异常字符出现。
1 | export default { |
5.5 sticky属性
RegExp.prototype.sticky
:是否设置了y
修饰符
1 | const r = /hello\d/y |
5.6 flags属性
RegExp.prototype.flags
:返回正则表达式的修饰符
1 | // ES5的source属性 |
5.7 RegExp.escape()
功能:将字符串中有特殊正则含义的字符转义掉
注意:曾被建议加入ES7
,由于安全风险没被采纳
1 | // 原始字符串 |
5.8 后行断言
提案阶段,在ES7
中加入。