了解 ES9 新特性:正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言
前言
正则表达式是前端开发中常用的一项技术,也是一种强大的文本匹配工具。而 ES9 引入的正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言,更加丰富了正则表达式的功能性,提供了更加精确、灵活的匹配方式。本文将详细介绍 Lookbehind 前瞻零宽断言、后顾零宽断言的具体用法和实现方法,并提供一些示例代码,帮助读者更好地理解和掌握这一新特性。
Lookbehind 前瞻零宽断言
Lookbehind 前瞻零宽断言是 ES9 新增的正则表达式特性之一,可以在匹配字符串之前进行前瞻零宽断言。它与前面介绍的前瞻零宽断言类似,都是在特定位置上进行判断,只是 Lookbehind 前瞻零宽断言是从匹配位置之前开始进行断言的。
Lookbehind 断言有两种形式:正向前瞻零宽断言和负向前瞻零宽断言。正向前瞻零宽断言表示匹配该位置之前符合指定条件的子串,而负向前瞻零宽断言则表示该位置之前不符合指定条件的子串。
具体用法如下所示:
- (?<=pattern):正向前瞻零宽断言,表示匹配该位置之前符合 pattern 的子串。
- (?<!pattern):负向前瞻零宽断言,表示该位置之前不符合 pattern 的子串。
下面我们来看一个具体的例子:
const str = 'es6 es7 es8'; const reg1 = /(?<=es)6/g; const reg2 = /(?<!es)7/g; console.log(str.match(reg1)); // ['6'] console.log(str.match(reg2)); // ['7']
我们在这个例子中使用了 Lookbehind 断言来匹配字符串中的子串。首先我们使用了正向前瞻零宽断言 (?<=es)
,表示匹配以 es
开始的子串,并且匹配位置之前符合该条件。在字符串 es6 es7 es8
中,匹配的位置为 es
和 6
之间的位置,于是匹配结果为 6
。接着我们使用了负向前瞻零宽断言 (?<!es)
,表示该位置之前不符合以 es
开始的子串,于是匹配位置为 7
,匹配结果为 7
。
后顾零宽断言
后顾零宽断言与前面介绍的 Lookbehind 前瞻零宽断言类似,也是在匹配字符串之后进行后顾零宽断言的。后顾零宽断言的形式为:
- (?<=pattern):正向后顾零宽断言,表示匹配该位置之后符合 pattern 的子串。
- (?<!pattern):负向后顾零宽断言,表示该位置之后不符合 pattern 的子串。
下面我们来看一个具体的例子:
const str = 'es6 es7 es8'; const reg1 = /(?<=es)\d+/g; const reg2 = /(?<!es)\d+/g; console.log(str.match(reg1)); // ['6', '7', '8'] console.log(str.match(reg2)); // ['6', '8']
我们在这个例子中使用了后顾零宽断言来匹配字符串中的子串。首先我们使用了正向后顾零宽断言 (?<=es)
,表示匹配以 es
结束的子串,并且匹配位置之后符合该条件。在字符串 es6 es7 es8
中,匹配的位置为 es
和 6
之间的位置,于是匹配结果为 6
。然后匹配 7
和 8
,最终匹配结果为 ['6', '7', '8']
。
接着我们使用了负向后顾零宽断言 (?<!es)
,表示该位置之后不符合以 es
结束的子串,于是匹配的位置为 6
和 8
,最终匹配结果为 ['6', '8']
。
总结
本文详细介绍了 ES9 新特性:正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言的具体用法和实现方式,并提供了实例代码,帮助读者更好地理解和掌握这一新特性。这些新特性让正则表达式更加精确、灵活,能够提供更加精细的匹配方式。读者可以在实际项目中尝试使用这些新特性,提高代码的可读性和执行效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a3c02f48841e989402259f