我对这个正则表达式的东西有点新鲜。
在分析某些代码时,我经常遇到模式.+?
或(.+?)
我似乎无法使用我的noobish演绎推理找到这种模式的含义。
答案 0 :(得分:13)
.
表示任何字符(新行除外)。 +
表示一个或多个。在这种情况下,?
意味着懒惰或非贪婪。这意味着它将尝试匹配满足量词的绝对最小字符。例如:
> 'abc'.match(/.+/)
["abc"]
> 'abc'.match(/.+?/)
["a"]
> 'abc'.match(/.*/)
["abc"]
> 'abc'.match(/.*?/)
[""]
答案 1 :(得分:5)
这取决于你对模式有什么样的了解。这是一个解释,假设您对正则表达式有一些基本的想法:
.
匹配任何字符+
表示重复最后一次模式一次或多次.+
表示一个或多个字符 ?
表示 ungreedy ,这表示匹配将在第一时间停止。贪婪的快速解释:
/.+X/.exec("aaaXaaaXaaa");
["aaaXaaaX"]
/.+?X/.exec("aaaXaaaXaaa");
["aaaX"]
如您所见,?
字符使搜索不合适,因此尽可能少地匹配。