在 ECMAScript 2018 中,引入了一种新的正则表达式语法:Lookahead Assertions(前瞻断言)。它可以让我们在匹配字符串时,向前查看一定的字符,以便更精确地匹配目标字符串。
Lookahead Assertions 的语法
Lookahead Assertions 有两种形式:Positive Lookahead 和 Negative Lookahead。它们的语法分别如下:
- Positive Lookahead:
(?=pattern)
,表示后面必须跟着pattern
才能匹配成功。 - Negative Lookahead:
(?!pattern)
,表示后面不能跟着pattern
才能匹配成功。
其中,pattern
就是要查看的字符串模式,可以是一个简单的字符,也可以是一个复杂的正则表达式。
Positive Lookahead 的使用
下面我们来看一个简单的例子,假设我们要匹配一个字符串中所有的数字,但是只想匹配那些后面跟着 %
符号的数字。我们可以使用 Positive Lookahead 来实现这个需求:
const str = "1% 2 3% 4 5%"; const pattern = /\d(?=%)/g; const result = str.match(pattern); console.log(result); // ["1", "3"]
上面的正则表达式 \d(?=%)
中,\d
表示匹配数字,(?=%)
表示向前查看一个 %
符号。因此,只有后面跟着 %
符号的数字才能匹配成功。
Negative Lookahead 的使用
Negative Lookahead 的使用和 Positive Lookahead 类似,只不过它表示后面不能跟着某个字符串才能匹配成功。下面我们来看一个例子,假设我们要匹配一个字符串中所有不以 #
开头的单词:
const str = "#hello world #hi #bye"; const pattern = /\b(?!#)\w+\b/g; const result = str.match(pattern); console.log(result); // ["world"]
上面的正则表达式 \b(?!#)\w+\b
中,\b
表示单词边界,(?!#)
表示后面不能跟着 #
符号,\w+
表示匹配单词字符(包括字母、数字和下划线),因此只有不以 #
开头的单词才能匹配成功。
Lookahead Assertions 的指导意义
Lookahead Assertions 在前端开发中有很多实际应用场景。比如,我们可以用它来匹配特定格式的字符串,或者过滤掉不符合要求的字符串等等。
此外,Lookahead Assertions 还可以帮助我们提高正则表达式的效率。因为在匹配字符串时,它可以让我们更精确地定位目标字符串,从而减少匹配的次数,提高匹配的效率。
总结
本文介绍了 ECMAScript 2018 中的 Regular Expression Lookahead Assertions,包括 Positive Lookahead 和 Negative Lookahead 两种形式的语法和使用方法。同时,我们还探讨了 Lookahead Assertions 的实际应用场景和指导意义。
了解 Lookahead Assertions 的语法和使用方法,可以让我们更加灵活地运用正则表达式,提高编程效率,同时还能让我们更深入地理解正则表达式的工作原理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65173b1e95b1f8cacdf75777