2014-03-30 170 views
0

我以下的正則表達式的工作:貪婪正則表達式的JavaScript

var match = string.match(/(?:(normal|italic|oblique))?\s*(?:(normal|small-caps))?\s*(?:((?:normal|bold|bolder|lighter|\d+(?:\%|in|cm|mm|em|rem|ex|pt|pc|px)))\/?)?\s*((?:(?:xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller|\d+(?:\%|in|cm|mm|em|rem|ex|pt|pc|px))\s*){1,2})?\s*(?:(normal|inherit|\d+(?:\%|in|cm|mm|em|rem|ex|pt|pc|px))\s*)?\s*(?:([a-zA-Z\-\,\'\"\s]+)\s*)?(?:,|;)(?:(caption|icon|menu|message-box|small-caption|status-bar)\s*)?/i); 

的字符串是:

var string = "font: normal small-caps fantasy, sans-serif;" 

我需要每個值的匹配陣列但是返回到各得其所其中一場比賽過於貪婪。結果是這樣的:

match[1] = "normal" 
match[2] = "small" 
match[6] = "-caps fantasy, sans-serif" 

我需要的結果是:

match[1] = "normal" 
match[2] = "small-caps" 
match[6] = "fantasy, sans-serif" 

希望這是有道理的。謝謝您的幫助。

+2

你忘了逃脫你'-'s,爲一件事。 – Doorknob

+1

@門把手在哪裏逃避 - ? –

+1

當我測試你的小提琴代碼時,'match [1]'是'undefined','match [2]'是'normal','match [6]'是'-caps fantasy,sans-serif': http://jsfiddle.net/tC7T7/。這讓我認爲你發佈的代碼之外有什麼問題。 –

回答

0

做最後一部分不貪婪,而不是([a-zA-Z\-\,\'\"\s]+)做:

([a-zA-Z\-\,\'\"\s]+?) 

還有沒有需要逃避所有這些字符:

([-a-zA-Z,'"\s]+?)