这个正则表达式应该捕获一个元素的不透明度值,如果它有一个,但我对它正在做的事情有点困惑:
function getOpacity(elem) {
var filter = elem.style.filter;
return filter ?
filter.indexOf("opacity=") >= 0 ? (parseFloat(filter.match(/opacity=([^)]+)/)[1]) / 100) + "" : "" : elem.style.opacity;
}
这里似乎有一个捕获([^)]+)
。在其内部,应忽略一个或多个右括号[^)]+
。我想我一定错了。一个或多个右括号会被忽略的是什么?这没有意义。
在任何情况下,似乎正则表达式结束,因为在提到的最后一个+
之后,有一个/
。这是否表明regEx已终止?在此之后,立即调用捕获[1]
。也许它实际上并没有结束..?
任何帮助都明白了这里发生了什么是值得赞赏的。 RegEx curtesy of javascript ninja book
答案 0 :(得分:4)
[^)]+
并不意味着“忽略右括号”,它意味着“收集尽可能多的字符(至少一个),这是除了右括号之外的任何字符。换句话说,一切都到下一个近右支架。
答案 1 :(得分:2)
[^)]+
- 表示未关闭括号的1个或多个字符。
因此,对于filter: alpha(opacity=50)
字符串,/opacity=([^)]+)/
将匹配50
答案 2 :(得分:1)
/
终止正则表达式,[1]
部分拉出数组中的第二个索引。 (在这种情况下是第二场比赛)
答案 3 :(得分:1)
你几乎做对了。 [^)]+
表示匹配另外一个非“)”字符。
是的,/
标志着正则表达式的结束。
答案 4 :(得分:1)
[)]
匹配右括号,而[^)]
匹配任何但右括号。他们是对立的。 [^)]+
贪婪地匹配任何未关闭括号的连续字符。