javascript中的空间失败后的负向前瞻

问题描述:

我试图删除所有不包含变量的sCss属性,其中包含$c_。只要在$c_之前没有字符,它就可以正常工作。javascript中的空间失败后的负向前瞻

我有以下的正则表达式:[\-a-z]+:[\s\w\d]*(?!\$c_)[^{;]+;

前7个属性应该被保留,其余部分移除。

svg{ 
.fill{fill:$c_mainColorDark;} 
.fill{fill: $c_mainColorDark;} 
color:$c_red; 
color: $c_red; 
border:$c_red;  
border:1px solid $c_red;  
border: 1px solid $c_red; 
height:em(16); 
margin-right: 10px;} 

例如在:https://regex101.com/r/1cGPar/1

我缺少什么?

+0

尝试['[-az] +:(?!。* \ $ c_)[\ s \ w] * [^ {;] +;'](https://regex101.com/r/QWTW0I/ 1) –

+0

工程太棒了!谢谢! – user3046591

+0

很高兴为你效劳。请考虑接受答案(请参阅[如何接受SO答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)),并且如果我的答案证明对我有帮助,你(见[如何在堆栈溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow))。 –

你可以使用像(?!.*\$c_)(?![\w\s]*\$c_)负先行放置:后:

​​7188​​

regex demo

这样一来,有$c_:都失败(即没有匹配的所有比赛将是回)。

请注意,\w已经匹配数字,因此,[\w\d]可以安全地减少到\w

我也认为加上i不区分大小写的修饰符会使它更安全一些,因为[a-z]也会匹配大写的ASCII字母。