除了是用?= 之外,我们还可以使用?! 表示不等:
> const RE_AS_NO_BS = /aa(?!bb)/; > RE_AS_NO_BS.test('aabb') false > RE_AS_NO_BS.test('aab') true > RE_AS_NO_BS.test('aac') true再来看一下Lookbehind的使用。
Lookbehind和Lookahead查询的方向刚刚相反。
向后匹配是使用?<=来表示的,我们来看一个例子:
const RE_DOLLAR_PREFIX = /(?<=\$)foo/g; '$foo %foo foo'.replace(RE_DOLLAR_PREFIX, 'bar'); // '$bar %foo foo'上面的例子中,我们匹配了最前面的$,然后使用bar替换掉了foo。
同样的,我们也可以使用?<! 来表示非相等的情况:
const RE_NO_DOLLAR_PREFIX = /(?<!\$)foo/g; '$foo %foo foo'.replace(RE_NO_DOLLAR_PREFIX, 'bar'); // '$foo %bar bar' dotAll flag正常情况下dot . 代表的是一个字符,但是这个字符不能够代表行的结束符:
> /^.$/.test('\n') false而dotAll是在 dot . 匹配后面引入的s, 它可以被用来匹配行的结束符:
> /^.$/s.test('\n') true在ES中,有下面几种字符表示的都是行的结束符:
U+000A LINE FEED (LF) (\n)
U+000D CARRIAGE RETURN (CR) (\r)
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR
总结以上就是ES9中引入的正则表达式RegExp的新特性了,希望大家能够喜欢。