这些正则表达式之间的区别是什么?

时间:2015-09-11 22:29:54

标签: javascript regex

我正在阅读Ionic的源代码。我遇到了这个正则表达式,我对它感到非常困惑。

([\s\S]+?)

好吧,它在每个字母上进行分组,无论是白色空格还是非白色空间???

为什么他们不这样做

(.+?)

我错过了什么吗?

5 个答案:

答案 0 :(得分:11)

.匹配任何符号,但换行符。为了使其与换行符匹配,在大多数语言中都有一个修饰符(dotall,singleline)。但是,在JS中,没有这样的修饰符。

因此,解决方法是使用匹配任何字符的[\s\S]字符类,包括换行符,因为\s将匹配所有空格,\S将匹配所有非空格 - 空白字符。同样,可以使用[\d\D][\w\W]

此外,有一个[^]模式可以匹配JS中的相同内容,但由于它是特定于JavaScript的,因此包含此模式的正则表达式在正则表达式之间不可移植。

+?惰性量化器匹配符合前一个子模式的1个或多个符号,但尽可能少。因此,如果在模式的末尾使用它,它将仅匹配1个符号。

答案 1 :(得分:3)

.匹配所有换行符。这实际上是javascript的一个众所周知/记录的问题。 \s(空白匹配)以及它的否定\S(非空白匹配)提供dotall匹配,包括换行符。因此,[\s\S]通常比.

更频繁地使用

答案 2 :(得分:3)

在Regexp的许多实现中“。”与新线不匹配。所以他们使用“[\ s \ S]”作为一个小黑客=)

答案 3 :(得分:1)

他们使用的RegEx包含更多字符(基本上所有内容)。

\s匹配任何字或数字字符或空格。

\S匹配除数字,单词字符或空格之外的任何内容

Casimir指出:

.匹配除换行符(\n

之外的任何字符

答案 4 :(得分:1)

.匹配除回车/r和新行/n

之外的任何字符

[/s/S](空格和非空格)的最短方式是[^](不是没有)