如何:
// returns array: ["0px", "3px", "2px"]
"margin: 0px 3px 2px;".match(/\d+(?:px|em)?/g)
使用g
(全局)標誌來匹配整個字符串,而不是在第一次匹配時停止。
// other example - returns array: ["3em", "2px", "39"]
"margin: 3em 2px 39;".match(/\d+(?:px|em)?/g)
爲了進一步闡明如何工作的:
\d+
比賽號碼(以下一個或多個相互)
(?:px|em)?
跳過捕捉(但仍然匹配!)這組 - 查找PX或em字符串。最後的問號表示可能找不到整個組(有數字時沒有單位)。
編輯:從下面的評論回答OP的擔憂。
這樣做:new RegExp(/\d+(?:px|em)?/g).exex(mystring)
不起作用由於兩個原因。 首先 - 從另一個創建新的RegExp時不能提供標誌(g
)(這裏是這種情況 - /\d+(?:px|em)?/g
等同於RegExp對象,就像[]
相當於new Array()
。使用new RegExp
構造創建RegExp對象的正確方法是傳遞兩個字符串參數:第一個是pattern,第二個是flags,所以它會變成:new RegExp('\d+(?:px|em)?', 'g')
。 第二件事是.exec()
方法總是返回第一個匹配(不是全部),所以它不適用於你之後的內容。
因此,要重用幾個在你的腳本,你必須把它分配給變量的地方是正則表達式,然後傳遞給.match()
功能。它看起來是這樣的:
var reg = new RegExp('\d+(?:px|em)?', 'g');
// somewhere down the road...
mystring.match(reg);
// and on some other string...
myotherstring.match(reg);
來源
2012-12-10 13:44:36
WTK
斯普利特':',然後通過空格分開。你應該得到一個包含0px,3px,2px令牌的數組。上面的「解決方案」可能適用於或不適用於所有情況,因爲我不知道CSS規則的確切格式,因此您需要查看規範。 – nhahtdh