CSS Filter Regex JS

时间:2017-08-03 14:35:45

标签: javascript css regex filter

我正在尝试检测元素的CSS属性filter是否已包含某些规则。 但我的正则表达式从未发现任何匹配:/saturate\(.[^\)]\)/

这是给你们的演示:

var filter = $('div').css('filter');

$('p').eq(0).text(filter.search(/saturate\(.[^\)]\)/)); //Should return something else than -1
$('p').eq(1).text(filter.search(/contrast\(.[^\)]\)/)); //Should return -1
div{
  filter: brightness(1.9) saturate(80%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>

<p></p>
<p></p>

2 个答案:

答案 0 :(得分:4)

您在正则表达式中遗漏了+

&#13;
&#13;
var filter = $('div').css('filter');
//                                               V here!
$('p').eq(0).text(filter.search(/saturate\(.[^\)]+\)/)); //Should return something else than -1
$('p').eq(1).text(filter.search(/contrast\(.[^\)]+\)/)); //Should return -1
&#13;
div{
  filter: brightness(1.9) saturate(80%);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>

<p></p>
<p></p>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您应该在正则表达式中使用\([^)]+\)而不是\(.[^\)]\)

var filter = $('div').css('filter');

$('p').eq(0).text(filter.search(/saturate\([^)]+\)/)); // 16
$('p').eq(1).text(filter.search(/contrast\([^)]+\)/)); // -1
div{
  filter: brightness(1.9) saturate(80%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>

<p></p>
<p></p>

\(.[^\)]\)匹配(,然后除了换行符之外的任何字符(带有.),然后是{{1}以外的单个字符。 1}}(您的否定字符类)),然后是文字[^\)]

)将匹配

  • \([^)]+\) - 文字\(
  • ( - 除[^)]+
  • 以外的1个或多个字符
  • ) - 文字\)