RegExp 构造函数
ES5 的参数有两种情况
var regex= new RegExp('xyz','i')
var regex= new (/xyz/i)
ES5不允许使用第二个参数
ES6
var regex= new RegExp('xyz','ig')
var regex= new (/xyz/ig)
var regex = new (/xyz/ig,'i')
使用两个参数后面一个会覆盖掉前面的修饰符
u修饰符
“ . ”字符在正则表达式中, 含义是除了换行符以外的任意单个字符
对于大于0xFFFF的Unicode 字符,点字符不能识别 需要加上 u 修饰符
> var s='\u{10f50}'
undefined
> s
'�'
> /^.$/.test(s)
false
> /^.$/u.test(s)
true
>
\u{3} “{}”正则中会被解读为量词,需要加u修饰符
y修饰符
直接上代码
> var s='aaa_aa_a'
> var reg=new RegExp(/a+/g)
> reg.exec(s)
[ 'aaa', index: 0, input: 'aaa_aa_a' ]
> reg.exec(s)
[ 'aa', index: 4, input: 'aaa_aa_a' ]
> reg.exec(s)
[ 'a', index: 7, input: 'aaa_aa_a' ]
> var regy=new RegExp(/a+/y)
undefined
> regy.exec(s)
[ 'aaa', index: 0, input: 'aaa_aa_a' ]
> regy.exec(s)
null
> regy.exec(s)
[ 'aaa', index: 0, input: 'aaa_aa_a' ]
> regy.exec(s)
null
> var r=/a+_/y
undefined
> r.exec(s)
[ 'aaa_', index: 0, input: 'aaa_aa_a' ]
> r.exec(s)
[ 'aa_', index: 4, input: 'aaa_aa_a' ]
> r.exec(s)
参数的匹配会设置lastIndex值 为空时 设置为0
y参数 为 lastIndex 开始匹配 隐含^的意思
> 'x##'.split(/#/y)
[ 'x##' ]
> '##x'.split(/#/y)
[ '', '', 'x' ]
> 'aaaa'.replace(/a/y,'hb')
'hbaaa'
> 'aaaa'.replace(/a/yg,'hb')
'hbhbhbhb'
> 'aaaa'.match(/a/y)
[ 'a', index: 0, input: 'aaaa' ]
> 'aaaa'.match(/a/yg)
[ 'a', 'a', 'a', 'a' ]
自己领会
新增属性
- sticky属性 表示正则是否设置了y修饰符
- flags属性 返回正则的修饰符
s修饰符
使 . 可以匹配任意单个字符
后行断言
V8 引擎4.9版已经支持,Chrome 浏览器49版打开”experimental JavaScript features“开关(地址栏键入about:flags),就可以使用这项功能。