正则表达式中(。+?)的用途

时间:2010-03-15 23:08:29

标签: javascript regex

我对这个正则表达式的东西有点新鲜。

在分析某些代码时,我经常遇到模式.+?(.+?)

我似乎无法使用我的noobish演绎推理找到这种模式的含义。

2 个答案:

答案 0 :(得分:13)

.表示任何字符(新行除外)。 +表示一个或多个。在这种情况下,?意味着懒惰或非贪婪。这意味着它将尝试匹配满足量词的绝对最小字符。例如:

> 'abc'.match(/.+/)
["abc"]
> 'abc'.match(/.+?/)
["a"]
> 'abc'.match(/.*/)
["abc"]
> 'abc'.match(/.*?/)
[""]

答案 1 :(得分:5)

这取决于你对模式有什么样的了解。这是一个解释,假设您对正则表达式有一些基本的想法:

  • .匹配任何字符
  • +表示重复最后一次模式一次或多次
  • 到目前为止,.+表示一个或多个字符
  • ?表示 ungreedy ,这表示匹配将在第一时间停止。

贪婪的快速解释:

/.+X/.exec("aaaXaaaXaaa");
["aaaXaaaX"]
/.+?X/.exec("aaaXaaaXaaa");
["aaaX"]

如您所见,?字符使搜索不合适,因此尽可能少地匹配。