如何用 ES8 实现 JavaScript 正则模式的匹配

阅读时长 3 分钟读完

正则表达式是前端开发中非常重要的工具。JavaScript 作为前端开发的主要语言,自然也内置了对正则表达式的支持。在 ES8 中,正则表达式的匹配得到了进一步的强化和扩展。本文将介绍如何使用 ES8 中的新特性来实现 JavaScript 正则模式的匹配。

贪婪匹配和非贪婪匹配

在 ES8 中,正则表达式新增了两个标记:gy。其中,g 表示全局匹配,会匹配所有符合要求的字符串,而不仅仅是第一个符合要求的字符串。y 则表示粘连匹配,只会从上次匹配后的下一个字符开始匹配。这两个标记都可以对贪婪匹配和非贪婪匹配进行强制指定。

贪婪匹配是指尽可能匹配更多的字符。例如,正则表达式 /a+/g 会匹配到字符串 aaaaa 中的所有 a。相对地,非贪婪匹配则是尽可能匹配更少的字符。例如,正则表达式 /a+?/g 会匹配到字符串 aaaaa 中的五个 a,而不是匹配到全部的 a

下面是一个贪婪匹配和非贪婪匹配的示例代码:

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

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

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

环视

环视是一种断言,用于匹配指定位置周围的内容,但并不将其包含在匹配结果中。在 ES8 中,正则表达式新增了四种环视:正向前瞻((?=…))、正向后顾((?<=…))、负向前瞻((?!…))和负向后顾((?<!…))。

正向前瞻用于匹配符合指定模式的内容所在的位置,例如 /a(?=b)/ 可以匹配到 abc 中的第一个 a。正向后顾用于匹配前面恰好符合指定模式的内容,例如 /(?<=ab)c/ 可以匹配到 abc 中的 c

负向前瞻则表示不匹配符合指定模式的内容所在的位置,例如 /a(?!b)/ 可以匹配到 aca 中的两个 a,而不能匹配到 abc 中的 a。负向后顾用于匹配前面不符合指定模式的内容,例如 /(?<!ab)c/ 可以匹配到 aca 中的 c,而不能匹配到 abc 中的 c

下面是一个环视的示例代码:

标记的扩展

在 ES8 中,正则表达式还新增了一些标记的扩展。其中,\p{…} 可以匹配符合 Unicode 属性的字符,\P{…} 则可以匹配不符合 Unicode 属性的字符。而 . 则可以匹配任何单个字符,包括换行符在内。

下面是一个标记的扩展的示例代码:

结论

ES8 中对于正则表达式的优化和扩展,使得开发者能够更加便捷地处理丰富多彩的字符串匹配场景。通过了解这些新特性,可以为开发者提供更多的解决方案,同时更好地提高程序的效率。

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

纠错
反馈