"something".match(/\s*(.*?)\s*/)
> ['', '']
"something".match(/^\s*(.*?)\s*$/)
> ["something", "something"]
为何前者匹配的结果为空?
如果你不清楚正则的贪婪模式和非贪婪模式,请先移步这里.
整个匹配分为三步:
- 第一个 \s*, 贪婪模式把字符全部吞掉,然后回溯,直到第一个字符任然没找到
- 第二步是 .*? 由于是非贪婪模式匹配了一个字符就结束了,继续第三步
- 第三步匹配失败,回溯到第二步,那第二步会继续减少吞掉的字符,于是字符数缩减到零。
可能这么说还是不太清晰,先看看这个对比:
关于返回结果不是 null 而是 “”,你可以理解为匹配到了零个 a。