2015-09-11 108 views
11

我正在阅读Ionic的源代码。我碰到这个表达式,我“敢用它束手无策。这些正则表达式有什么区别

([\s\S]+?) 

好了,它的分组在每一个字符要么是一个空格,或者非空格???

为什么没”牛逼,他们只是做

(.+?) 

我缺少的东西?

+6

因为点不符合换行符\ n' –

回答

11

.匹配任何象征,而是一个换行符。为了使它与后面,在大多数语言是一个修饰符(DOTALL , 单线)。但是,在JS中,没有这样的修饰符。

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

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

+?懒惰量化符匹配符合前面的子模式的一个或多个符号,但尽可能少。因此,如果在模式结束时使用这种方式,它将仅匹配1个符号。

+0

只是为了完整性:* dotall/singleline *修饰符通常是's' in其他口味。 –

+0

或Ruby中的'/ m'。 –

+0

**呃!** - 'm'的含义与其他口味(包括JS)完全不同......他们为什么不坚持's'? : - \他们也将它命名为'Regexp :: MULTILINE',它与'PCRE2_MULTILINE'不同。这里很好。你最不感到惊讶的原则是什么? ;-) –

3

A .匹配所有内容但是换行符。这实际上是一个众所周知的/记录在JavaScript中的问题。 \s(空格匹配)旁边是否定\S(非空白匹配)提供包括换行符的dotall匹配。因此[\s\S]通常比.

3

更频繁地使用。在许多Regexp“。”的实现中,不匹配新行。所以他们使用“[\ s \ S]”作为一个小破解=)

1

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

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

\S匹配任何东西,除了一个数字,单词字符,或空白

随着卡西米尔指出:

.匹配任何字符除了换行符(\n

1

.匹配任何字符,除了回车/r和新行/n

最短的做法[/s/S](白色空间和非空白空间)为[^](不是空白)

相关问题