我正在阅读Ionic的源代码。我遇到了这个正则表达式,我对它感到非常困惑。
([\s\S]+?)
好吧,它在每个字母上进行分组,无论是白色空格还是非白色空间???
为什么他们不这样做
(.+?)
我错过了什么吗?
答案 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]
(空格和非空格)的最短方式是[^]
(不是没有)