正则表达式是前端开发中非常重要的工具。JavaScript 作为前端开发的主要语言,自然也内置了对正则表达式的支持。在 ES8 中,正则表达式的匹配得到了进一步的强化和扩展。本文将介绍如何使用 ES8 中的新特性来实现 JavaScript 正则模式的匹配。
贪婪匹配和非贪婪匹配
在 ES8 中,正则表达式新增了两个标记:g
和 y
。其中,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
。
下面是一个环视的示例代码:
const str = 'abc,acd'; const pattern = /(?<=\w{3}),/; const result = pattern.exec(str); console.log(result[0]); // ','
标记的扩展
在 ES8 中,正则表达式还新增了一些标记的扩展。其中,\p{…}
可以匹配符合 Unicode 属性的字符,\P{…}
则可以匹配不符合 Unicode 属性的字符。而 .
则可以匹配任何单个字符,包括换行符在内。
下面是一个标记的扩展的示例代码:
const str = '𝒫𝓇𝑒𝓉𝑒𝓃𝒹𝑒𝓇 𝓉𝒽𝑒 𝒜𝒸𝒸ℴ𝓊𝓃𝓉'; const pattern = /\p{Lu}/gu; const result = str.match(pattern); console.log(result); // ['𝒫', '𝓇', '𝓉', '𝑒', '𝓉', '𝑒', '𝓃', '𝒹', '𝑒', '𝓇', '𝓉', '𝒜', '𝒸', 'ℴ', '𝓊', '𝓃', '𝓉']
结论
ES8 中对于正则表达式的优化和扩展,使得开发者能够更加便捷地处理丰富多彩的字符串匹配场景。通过了解这些新特性,可以为开发者提供更多的解决方案,同时更好地提高程序的效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f0c4d66fbf96019733ea82