我正在阅读Ionic的源代码。我碰到这个表达式,我“敢用它束手无策。这些正则表达式有什么区别
([\s\S]+?)
好了,它的分组在每一个字符要么是一个空格,或者非空格???
为什么没”牛逼,他们只是做
(.+?)
我缺少的东西?
我正在阅读Ionic的源代码。我碰到这个表达式,我“敢用它束手无策。这些正则表达式有什么区别
([\s\S]+?)
好了,它的分组在每一个字符要么是一个空格,或者非空格???
为什么没”牛逼,他们只是做
(.+?)
我缺少的东西?
的.
匹配任何象征,而是一个换行符。为了使它与后面,在大多数语言是一个修饰符(DOTALL , 单线)。但是,在JS中,没有这样的修饰符。
因此,解决办法是使用[\s\S]
字符类将匹配任何字符,包括换行,因为\s
将匹配所有的空白和\S
会匹配所有的非空白字符。同样,可以使用[\d\D]
或[\w\W]
。
此外,还有一个[^]
模式可以匹配JS中的同一事物,但由于它是JavaScript特定的,因此包含此模式的正则表达式在正则表达式之间不可移植。
+?
懒惰量化符匹配符合前面的子模式的一个或多个符号,但尽可能少。因此,如果在模式结束时使用这种方式,它将仅匹配1个符号。
只是为了完整性:* dotall/singleline *修饰符通常是's' in其他口味。 –
或Ruby中的'/ m'。 –
**呃!** - 'm'的含义与其他口味(包括JS)完全不同......他们为什么不坚持's'? : - \他们也将它命名为'Regexp :: MULTILINE',它与'PCRE2_MULTILINE'不同。这里很好。你最不感到惊讶的原则是什么? ;-) –
A .
匹配所有内容但是换行符。这实际上是一个众所周知的/记录在JavaScript中的问题。 \s
(空格匹配)旁边是否定\S
(非空白匹配)提供包括换行符的dotall
匹配。因此[\s\S]
通常比.
更频繁地使用。在许多Regexp“。”的实现中,不匹配新行。所以他们使用“[\ s \ S]”作为一个小破解=)
他们使用的RegEx包含更多的字符(基本上是所有的东西)。
\s
匹配任何单词或数字字符或空格。
\S
匹配任何东西,除了一个数字,单词字符,或空白
随着卡西米尔指出:
.
匹配任何字符除了换行符(\n
)
.
匹配任何字符,除了回车/r
和新行/n
最短的做法[/s/S]
(白色空间和非空白空间)为[^]
(不是空白)
因为点不符合换行符\ n' –