2011-10-12 66 views
2

这是我投入Chrome的浏览器控制台JavaScript的正则表达式匹配()结果

>> 'abc,de.fg\nhi'.match(/.*/g) 
["abc,de.fg", "", "hi", ""] 

为什么在结果出现空字符串?

一个单独的问题:

>> 'abc\ndef\n'.match(/(.*)\n/) 
["abc 
", "abc"] 
>> 'abc\ndef\n'.match(/.*\n/) 
["abc 
"] 

为什么第一个给两个值?我无法找到任何指示组(括号)应该追加以匹配结果的文档。这在使用/g修饰符时不会发生。

回答

2

关于你的第二个问题,如果有团体呈现的结果数组包含在位置零整场比赛和组在随后的位置相匹配。

+0

我相信你在这个观察中是正确的,我想出了相同的解释,但是它不适用于使用/ g修饰符! –

+0

随着全局匹配标志结果数组保持每一场比赛的顺序,所以我想没有组比赛的余地。 – pakopa

0

正则表达式中的*与零个或多个字符匹配。这个。匹配除了新行之外的任何内容。因此,它会在换行符上分割并匹配前后的空白区域。

'abc,de.fg\nhi'.match(/.+/g) 
["abc,de.fg", "hi"] 
+0

是的,使用'+'显然是大多数情况下的方法。但我想知道为什么最后有一个空字符串?如果像你说的那样在'\ n'之前和之后匹配一个空的,为什么结果不是'[“abc,de.fg”,“”,“”,“hi”,“”]]' ? –

+1

正则表达式已经不匹配(因为它不匹配\ n)并且从那一点开始继续。之后,它会找到字符串的“hi”部分(因为它会找到尽可能多的字符)并匹配。然后当它到达字符串的末尾时,它会匹配另一个空字符。 –