Регулярные выражения JavaScript - соответствуют серии шестнадцатеричных чисел

Приветствия JavaScript и гуру регулярного выражения,

Я хочу вернуть все совпадения во входной строке, которая представляет собой шестнадцатеричные шестнадцатеричные числа с шестью цифрами с любым количеством пробелов между ними. Например, "333333 e1e1e1 f4f435" должен возвращать массив:

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

Вот что у меня есть, но это не совсем правильно. Я не понимаю, как получить дополнительное пустое пространство там, и я получаю только одно совпадение.

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

Спасибо за вашу помощь,

-NorthK

Ответы

Ответ 1

Используйте флаг g для соответствия глобально:

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

Другим хорошим улучшением будет добавление границ слов:

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

Если вам нравится, вы также можете установить флаг я для нечувствительного к регистру соответствия:

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

Ответ 2

попробовать:

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

Обратите внимание на флаг g для соответствия по всему миру.

Ответ 3

Это зависит от ситуации, но я обычно хочу, чтобы мой код не мог молча принять (и игнорировать или неверно интерпретировать) неправильный ввод. Поэтому я обычно делал бы что-то вроде этого.

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

Ответ 4

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

дает вам массив всех шестизначных шестнадцатеричных чисел в данной строке subject.

Границы слов \b необходимы, чтобы избежать совпадения частей более длинных шестнадцатеричных чисел.