我正在尝试检测元素的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>
答案 0 :(得分:4)
您在正则表达式中遗漏了+
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;
答案 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}}(您的否定字符类)
),然后是文字[^\)]
。
)
将匹配
\([^)]+\)
- 文字\(
(
- 除[^)]+
)
- 文字\)
。