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

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

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

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

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

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

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

-NorthK

Ответы [ 4 ]

22 голосов
/ 28 января 2010

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

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

Еще одним хорошим улучшением было бы добавление границ слов:

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

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

/\b[0-9A-F]{6}\b/gi
3 голосов
/ 28 января 2010

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

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);
}
2 голосов
/ 28 января 2010

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

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

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

0 голосов
/ 28 января 2010
result = subject.match(/\b[0-9A-Fa-f]{6}\b/g);

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...