2010-01-28 367 views
13

問候JavaScript和正則表達式大師,JavaScript的正則表達式 - 匹配一系列的十六進制數字

我想返回在輸入字符串與中之間任意數量的空格6位十六進制數的所有比賽。例如,「333333 e1e1e1 f4f435」應該返回一個數組:

array[0] = 333333 
array[1] = e1e1e1 
array[2] = f4f435 

這裏是我有什麼,但它不是很right--我不清楚如何獲得可選空格在那裏,我只得到一場比賽。

colorValuesArray = colorValues.match(/ [0-9A-Fa-f] {6} /);

感謝您的幫助,

-NorthK

回答

19

使用標誌在全球範圍內匹配:

/[0-9A-Fa-f]{6}/g 

另一個很好的增強將被添加單詞邊界:

/\b[0-9A-Fa-f]{6}\b/g 

如果你喜歡,你還可以設置標誌不區分大小寫的匹配:

/\b[0-9A-F]{6}\b/gi 
+0

雖然,這確實允許_any_字符之間的數字,而不僅僅是空白。 – bdukes 2010-01-28 18:10:54

+0

非常感謝Gumbo! – northk 2010-01-28 18:13:15

+0

嗯,我認爲在這種情況下任何允許任何匹配的字符都可以;謝謝bdukes。 – northk 2010-01-28 18:14:08

2

嘗試:

colorValues.match(/[0-9A-Fa-f]{6}/g); 

注意g標誌在全球範圍內的比賽。

0
result = subject.match(/\b[0-9A-Fa-f]{6}\b/g); 

給出了給定字符串subject中所有6位十六進制數字的數組。

\b字邊界是避免匹配更長的十六進制數字的部分所必需的。

+0

啊,好點蒂姆,謝謝。 – northk 2010-01-28 18:17:04

2

這取決於情況,但我通常希望確保我的代碼不能默默接受(並忽略或錯誤解釋)不正確的輸入。所以我通常會做這樣的事情。

var arr = s.split(); 
for (var i = 0; i < arr.length; i++) { 
    if (!arr[i].match(/^[0-9A-Fa-f]{6}$/) 
     throw new Error("unexpected junk in string: " + arr[i]); 
    arr[i] = parseInt(arr[i], 16); 
} 
+0

謝謝傑森。 在這種情況下,我認爲它是確定的'因爲用戶會立即看到他們輸入的內容的結果,如果他們輸入垃圾:) – northk 2010-01-28 18:24:25

相關問題