/(.*?)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)
Where[\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 演示。
.slice(1)
删除字符串匹配,以便您在res
数组中只有捕获的组。