ES9的新特性:正则表达式RegExp (2)

除了是用?= 之外,我们还可以使用?! 表示不等:

> 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的新特性了,希望大家能够喜欢。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdsw.html