Переделать RegExp под старый синтаксис
Есть функция, которая принимает строку, и добавляет в массив только те значения, которые соответствуют регулярному выражению. ( Возвращает только подстроки, которые начинаются с хэштега, длина которых либо 3, либо 6 символов. То есть такие как #abc или #AA00ef). RegExp который я использую работает, но мне надо переписать его под синтаксис ES6, то есть без использования LookAhead.
function getHexadecimalColors(str) {
let res = [];
return str.match(/(?<=#)[0-9a-f]{6}|(?<=#)[0-9a-f]{3}(?![0-9a-f])/ig);
}
Ответы (2 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте захватывающую подмаску:
/#([0-9a-f]{3}(?:[0-9a-f]{3})?)(?![0-9a-f])/ig
См. пример работы регулярного выражения. Подробности*:
#- символ#([0-9a-f]{3}(?:[0-9a-f]{3})?)- три символа, используемых для обозначения шестнадцатеричных чисел, и затем ещё три таких символа (если есть)(?![0-9a-f])- сразу после текущей позиции не должно быть символа, используемого для обозначения шестнадцатеричных чисел.
Пример кода:
function getHexadecimalColors(str) {
var res = [],
re = /#([0-9a-f]{3}(?:[0-9a-f]{3})?)(?![0-9a-f])/ig,
m;
while (m = re.exec(str)) {
res.push(m[1]);
}
return res;
}
console.log(getHexadecimalColors('То есть такие как #abc или #AA00ef)'));
Автор решения: Qwertiy
→ Ссылка
Вообще, цвета могут быть ещё в 4 и 8 знаков (альфаканал) - возможно, их тоже стоит добавить.
function getHexadecimalColors(str) {
var res = str.match(/#([0-9a-f]{3}|[0-9a-f]{6})(?![0-9a-f])/gi)
return res && res.map(function (x) { return x.slice(1) });
}
console.log(getHexadecimalColors("a #12eq ##eeeeee#ff8#fffqqq#000abc#fff6"))