我必须捕获颜色语法,可以是数字%或 * 无 * 关键字,按照CSS规范。
下面是我的正则表达式,它捕获了数字%,但无法捕获none
关键字
((?:rgba?|hsla?|hwb|(ok)?lab|(ok)?lch)\((:?-?[\d.]+%?(deg|rad|grad|turn)?[,\s]+){2,3}[\s/]*-?[\d.]+%?\))
但是当我们在语法中使用 none 关键字时,它没有捕获。
const str = `{
rgb(102 none none / none);
rgba(40%, 20%, 60%, 100%);
hsl(270deg none none);
hsla(270deg none none 100);
hwb(0.75turn 20 40));
hwb(none 20% 40%);
lch(32.39 61.25 none)
oklch(0.44 0.16 303.38)
lab(32.39 38.43 -47.69 / 1)
oklab(44% 0.09 -0.13)
hwb(0.75turn 20% 40%);
rgba(40%, 20%, 60%, 100%);
hwb(4.712rad 20% 40%);
}`;
const ptrn = `((?:rgba?|hsla?|hwb|(ok)?lab|(ok)?lch)\\((:?-?[\\d\.]+%?(deg|rad|grad|turn)?[,\\s]+){2,3}[\\s/]*-?[\\d\.]+%?\\))`;
const rgx = new RegExp(ptrn, 'mig');
const matches = str.matchAll(rgx);
[...matches].forEach( m => {
console.log(m[1]);
})
如何在正则表达式中包含它?
working example
1条答案
按热度按时间2sbarzqh1#
只需为数字部分创建一个替代模式。我还允许更多白色: