[\s\S] 与 . (点)?

Rah*_*hul 5 regex regex-negation character-class

当我们在同一个字符类中包含字符类和否定字符类的速记时,它是否与 dot 相同这意味着任何字符?

我在regex101.com上做了一个测试,每个字符都匹配。

[\s\S] [\w\W][\d\D]一样. 吗?

我想知道这种行为是否在 Web 的前端和后端语言(如 Javascript、Php、Python 等)中持续存在。

Fed*_*zza 6

“不”不一样。如果您不使用该single line标志(意味着.不匹配所有),则有一个重要的区别。

[\s\S]当您想在.不匹配所有匹配时进行混合匹配时,这会派上用场。

用一个例子来解释它更容易。假设您想捕获a和之间的任何内容b,因此您可以使用模式a(.*?)b?用于非贪婪匹配和括号用于捕获内容),但是如果有新行假设您不想在同一组中捕获它,那么您可以有另一个正则表达式,如a([\s\S]*?)b.

因此,如果我们使用两种方法创建一种模式,则会导致:

a(.*)b|a([\s\S]*?)b
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在这种情况下,如果您在 regex101 中看到场景,那么您将有一种丰富多彩且简单的方法来区分场景(在绿色捕获组 #1 和红色捕获组 #2 中): 在此处输入图片说明

因此,总而言之,[\s\S]当您想要匹配多行并且.不适合您的需求时,这是一个正则表达式技巧。这基本上取决于您的用例。

但是,如果您使用匹配新行的single line标志.,那么您不需要正则表达式技巧,在下面您可以看到全部为绿色并且第 2 组(上面的红色)不匹配:在此处输入图片说明

还创建了一个 javascript 性能测试,它对性能的影响约为 25%:

https://jsperf.com/ss-vs-dot

在此处输入图片说明