2010-03-15 29 views
3

我對這個正則表達式有點新鮮。正則表達式中(。+?)的用途

在分析一些代碼,我經常碰到的模式.+?(.+?)

我似乎無法找到使用我noobish演繹推理這種模式的意義。

+0

http://www.regular-expressions.info/repeat.html很好地解釋它 – user187291 2010-03-15 23:16:31

回答

13

.表示任何字符(除了新行)。 +表示一個或多個。本文中的?表示懶惰或非貪婪。這意味着它會嘗試匹配滿足量詞的絕對最小字符。例如:

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

這取決於您對模式有什麼樣的知識。下面是假設你有某種基本概念的什麼正則表達式的解釋:

  • .任何字符
  • +手段重複過去的模式1次或多次匹配
  • 到目前爲止,.+意味着一個或多個字符
  • ?表示不確定,表示匹配將在第一次停止。

上貪婪的簡單說明:

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

正如你所看到的,?性格使得搜索ungreedy,從而匹配儘可能少。

相關問題