2013-04-03 201 views
1

我有一塊JS代碼的問題。它應該從給定的樣式聲明中找到所有出現的CSS顏色值(colorNames,#FFFFFF,#FFF,RGB,transparent),並用一個span元素替換它們,接着匹配它自己。匹配CSS RGB顏色值

好吧,一切似乎都沒問題,除了RGB()已經浪費了我整整一天的時間。

一個小的演示文稿和代碼可以在jsFiddle找到。在這裏,我們預覽了一些有問題的元素。

感謝您的時間和興趣!

+0

我認爲你的問題應該更清楚地解釋你在使用正則表達式找到像'rgb(x,y,z)' – Ian

+0

nope這樣的模式時遇到問題,正如你所看到的,在那個巨大的正則表達式中,我有'rgb()'的四種模式,大部分來自於stackoverflow。 – SYNCRo

+1

是的,我可以看到。但其他一切正常。所以你的問題在於具體的RGB正則表達式。看 - http://jsfiddle.net/Pm8vV/ - 只使用你發現的那些特殊的正則表達式,它仍然不起作用。 – Ian

回答

1

下應該處理任何有效rgbrgba

var regex = new RegExp(
    "rgb\\((?:(?:\\s*\\d+\\s*,){2}\\s*\\d+|" + 
    "(?:\\s*\\d+(?:\\.\\d+)?%\\s*,){2}\\s*\\d+(?:\\.\\d+)?%)\\s*\\)|" + 
    "rgba\\((?:(?:\\s*\\d+\\s*,){3}|" + 
    "(?:\\s*\\d+(?:\\.\\d+)?%\\s*,){3})\\s*\\d+(?:\\.\\d+)?\\s*\\)", "gi" 
); 

FIDDLE

+0

傑出!謝謝。 – SYNCRo

0

rgb函數不支持alpha參數(rgba)。此外,與這些函數匹配的正則表達式不起作用。我不得不承認,調試所有這些正則表達式以僅匹配一件事情是一件很痛苦的事情,因此我們將嘗試只做一件事情。 嘗試(不是值的所有檢查):

/(rgb\((?:\s*\d{1,3}\s*%?\s*,?\s*){3}\))/gi 

Result

編輯:
如果你想查詢你的價值觀,我們就會變得複雜多一點這個正則表達式。

+0

I真的不知道爲什麼你的Regex不想在'.replace()上工作,在'.match()'上像魅力一樣工作......我只是用'(rgb \\(。*?\\) )'現在是好的。我真的不關心檢查基本顏色的值,因爲我使用'document' DOM中檢索到的'rgb(x,y,z)'(如果我在.CSS文件中聲明瞭錯誤,可以在DOM .styleSheets元素中找到)。 [jsFiddle](http://jsfiddle.net/YEEnE/10/) – SYNCRo

+1

它確實有效([jsFiddle](http://jsfiddle.net/YEEnE/11/)),你只需要替換'\ ''按'\'的方式來做。此外,'。*?'可能有點冒險,但我猜這不是問題,因爲你假設正確的CSS。 – Loamhoof