ES9的新特性:正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言

阅读时长 4 分钟读完

正则表达式在前端开发中是非常重要的一部分,将字符串匹配与替换等操作变得更加高效和便捷。

在 ES9 中,正则表达式又有了一些新的特性,其中就包括了 Lookbehind 前瞻零宽断言、后顾零宽断言。这两种特性可以帮助我们更加精确地匹配字符串,提高程序的可读性和可维护性。

Lookbehind 前瞻零宽断言

Lookbehind 前瞻零宽断言是指在匹配字符串时,可以从后向前查找匹配,而不是从前往后。它与正常的前瞻零宽断言不同之处在于,前瞻零宽断言是从前往后查找匹配。

Lookbehind 前瞻零宽断言的语法如下:

其中 pattern 指的是要查找的字符串,match 是要匹配的字符串。

例如,我们想要找到字符串 'hello world' 中所有以数字开头的单词。使用 Lookbehind 前瞻零宽断言,可以写出如下的正则表达式:

在上面的例子中,我们使用了 Lookbehind 前瞻零宽断言 (?<=\s),表示要查找以空格开头的字符串。

然后我们使用了 \d\w* 来匹配以数字开头的单词,再加上 g 标志表示要全局匹配。

这样,我们就可以得到所有匹配的字符串 ['hello', 'world']

后顾零宽断言

后顾零宽断言与 Lookbehind 前瞻零宽断言类似,都是从后向前查找匹配。它的语法与 Lookbehind 前瞻零宽断言稍有不同:

其中 pattern 是要查找的字符串,match 是要匹配的字符串。

例如,我们想要找到所有不以字母结尾的单词,可以使用后顾零宽断言:

在上面的例子中,我们使用了后顾零宽断言 (?<![a-zA-Z]) 来排除以字母结尾的单词。这个正则表达式 /\b\w+(?<![a-zA-Z])/g 表示:

  • \b 表示单词边界;
  • \w+ 表示匹配一个或多个单词字符;
  • (?<![a-zA-Z]) 表示不以字母结尾。

这样,我们就可以找到所有不以字母结尾的单词,输出结果为 ['123']

总结

通过前瞻零宽断言和后顾零宽断言,我们可以更加精确地匹配字符串,提高正则表达式的可读性和可维护性。

在使用这两种特性时需要注意:

  1. Lookbehind 前瞻零宽断言和后顾零宽断言只能匹配已知长度的字符串。即从前往后或从后往前匹配时,被匹配字符串的长度必须是已知的。
  2. 前瞻零宽断言和后顾零宽断言不能同时出现在同一个表达式中。
  3. Lookbehind 前瞻零宽断言和后顾零宽断言目前仅支持 Chrome 和 Firefox 浏览器。

对于开发人员来说,这两种特性的引入将会大大提高正则表达式的可读性和可维护性。在实际开发中,我们可以根据实际需求灵活地运用它们,写出更加高效和易读的代码。

示例代码

下面是一些示例代码,可以帮助你更好地理解 Lookbehind 前瞻零宽断言和后顾零宽断言的使用:

-- -------------------- ---- -------
-- ---------- ------
----- --- - --------- -------- ------

----- ----- - ----------------

----- ------- - -----------------

---------------------
-- --------- --------


-- ------
----- --- - --------- -----------

----- ----- - ----------------------

----- ------- - -----------------

---------------------
-- -------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a13e7e48841e9894d809a4

纠错
反馈