开发者

JavaScript regular expressions - match a series of hexadecimal numbers

Greetings JavaScript and regular expression gurus,

I want to return all matches in an input string that are 6-digit hexadecimal numbers with any amount of white space in between. For example, "333333 e1e1e1 f4f435" should return an array:

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

Here is what I have, but it isn't quite right-- I'm not clear how to get the optional white space in there, and I'm only getting one match.

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

Thanks for your help,

开发者_StackOverflow中文版

-NorthK


Use the g flag to match globally:

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

Another good enhancement would be adding word boundaries:

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

If you like you could also set the i flag for case insensitive matching:

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


Alternatively to the answer above, a more direct approach might be:

/\p{Hex_Digit}{6}/ug

You can read more about Unicode Properties here.


It depends on the situation, but I usually want to make sure my code can't silently accept (and ignore, or misinterpret) incorrect input. So I would normally do something like this.

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);
}


try:

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

Note the g flag to Globally match.


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

gives you an array of all 6-digit hexadecimal numbers in the given string subject.

The \b word boundaries are necessary to avoid matching parts of longer hexadecimal numbers.


For people who are looking for hex color with alpha code, the following regex works:

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

The code allows both hex with or without the alpha code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜