Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用正则表达式从字符串中提取CSS3筛选函数_Javascript_Css_Regex_Filter - Fatal编程技术网

Javascript 如何使用正则表达式从字符串中提取CSS3筛选函数

Javascript 如何使用正则表达式从字符串中提取CSS3筛选函数,javascript,css,regex,filter,Javascript,Css,Regex,Filter,我正在使用一个RegEx来提取CSS3filter函数: let currentStyle=`blur(0em)drop shadow(rgb(0,0,0)0em 0em 0em)色调旋转(85度)灰度(150%)亮度(90%)url(#mySVGFilter)`; 让fnReg=new RegExp(“(^(模糊^亮度^对比度^阴影^色调旋转^灰度^反转^不透明度^饱和^乌贼色^ url)。*(?:[(\)\s)\])$); //返回null或与上述正则表达式的其他变体一起播放的整个字符串 让

我正在使用一个
RegEx
来提取CSS3
filter
函数:

let currentStyle=`blur(0em)drop shadow(rgb(0,0,0)0em 0em 0em)色调旋转(85度)灰度(150%)亮度(90%)url(#mySVGFilter)`;
让fnReg=new RegExp(“(^(模糊^亮度^对比度^阴影^色调旋转^灰度^反转^不透明度^饱和^乌贼色^ url)。*(?:[(\)\s)\])$);
//返回null或与上述正则表达式的其他变体一起播放的整个字符串
让matches=currentStyle.match(fnReg);
预期产出

var匹配=[
`模糊(0em)`,
`放置阴影(rgb(0,0,0)0em 0em 0em)`,
`色调旋转(85度)`,
`灰度(150%),
`亮度(90%),
`url(#mySVGFilter)`
]
问题 我不知道如何使它实际工作,以及如何简化正则表达式,因为有一些子组,如
rgb()
,与其他“主”组具有类似的模式。

根据的评论,我找到了一个实际工作的正则表达式,我想与大家分享,以便我们可以进一步改进它

//托马斯的正则表达式
设ThomasFnReg=
/[a-z-]+\(.*?\)(?=\s+[a-z-]+\(.*?\)\s*$)/g;
//我最后的正则表达式
设fnReg=
/(([a-z].*)\(.*)(?=\s([a-z].*)\(.*)\s*$)/g;
//可能的目标字符串
让targetString=`blur(0em)drop shadow(rgb(0,0,0)0em 0em 0em)色调旋转(85度)灰度(150%)亮度(90%)url(#mySVGFilter)`;
//试验
让matches0=targetString.match(ThomasFnReg);
document.body.innerHTML+=“Thomas的正则表达式结果”;
document.body.innerHTML+=“
    ”; matches0.map(x=>document.body.innerHTML+=`
  • ${x}
  • `); document.body.innerHTML+='
'; document.body.innerHTML+=“
”; 让matches1=targetString.match(fnReg); document.body.innerHTML+=“我的正则表达式结果”; document.body.innerHTML+=“
    ”; matches1.map(x=>document.body.innerHTML+=`
  • ${x}
  • `); document.body.innerHTML+='
'
body{font-size:16px;font-family:Arial;字母间距:0.02em}
预期的输出是什么?@Addis编辑了这篇文章,考虑到过滤函数的参数之一可能是字符串(例如,
url(“…”)
),使用正则表达式将很难做到这一点,字符串的内容可能有嵌套的(可能是不平衡的)括号等等。您是否考虑过使用许多可用的CSS解析库中的一个来代替呢?类似这样的东西怎么样?
/[a-z-]+\(.*?)(?=\s+\(.*?\)\s*$)/g
它不是那么精确,但应该与一般模式匹配它不是防弹的,但对于示例数据,可能会在
[](?=[^()]*.[*.[*.\w])上拆分([]*.[*[\35;\ w])
请参阅