/(.*?)hsl\((\d+),(\d+)%,(\d+)%\)/.exec(color)
Прежде всего, здесь не обязательно (.*?)
. exec
будет искать любое совпадение в строке.
Тогда, чтобы пространства (любое число, в том числе 0), просто положить \s*
между запятыми (я добавил еще немного слишком близко к скобки на всякий случай):
/hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/.exec(color)
Далее, вы должны позволить периодов в регулярном выражении, и если вы уверены, что не может быть каких-либо недействительные номера, вы можете использовать:
/hsl\(\s*(\d+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%\s*\)/.exec(color)
Где [\d.]
класс символов, который принимает оба числа и периоды. В противном случае, если вы можете иметь недопустимые номера и не хотите, чтобы получить их, используйте:
/hsl\(\s*(\d+)\s*,\s*(\d+(?:\.\d+)?%)\s*,\s*(\d+(?:\.\d+)?%)\)/.exec(color)
Где (\d+(?:\.\d+)?%)
принимает действительное число с плавающей точкой, за которой следует знак процента.
И вы можете применить регулярное выражение, как это:
color = 'hsl(162, 11.984633448805383%, 81.17647058823529%)';
regexp = /hsl\(\s*(\d+)\s*,\s*(\d+(?:\.\d+)?%)\s*,\s*(\d+(?:\.\d+)?%)\)/g;
res = regexp.exec(color).slice(1);
alert("Hue: " + res[0] + "\nSaturation: " + res[1] + "\nValue: " + res[2]);
jsfiddle demo.
.slice(1)
удаляет совпадение строк, так что у вас есть только захваченные группы в массиве res
.
Вы еще что-нибудь пробовали? – Jerry
Я пробовал /(.*?)hsl\((\d+),(\d+)%,(\d+)%\)/.exec(color); –