0

这个正则表达式应该捕获一个元素的不透明度值(如果它有一个),但我对它在做什么有点困惑:

function getOpacity(elem) {
    var filter = elem.style.filter;
    return filter ? 
    filter.indexOf("opacity=") >= 0 ? (parseFloat(filter.match(/opacity=([^)]+)/)[1]) / 100) + "" : "" : elem.style.opacity;
}

似乎这里正在发生捕获([^)]+)。并且在它里面,一个或多个右括号应该被忽略[^)]+。我想我一定有这个错误。一个或多个右括号会被忽略吗?那没有意义。

无论如何,似乎正则表达式结束了,因为在最后+提到之后,有一个/. 这是否表明正则表达式的终止?之后立即调用 capture [1]。所以也许它实际上还没有结束..?

任何帮助了解这里发生了什么都值得赞赏。javascript ninja book的正则表达式

4

5 回答 5

4

[^)]+并不意味着“忽略右括号”,它的意思是“收集尽可能多的字符(至少一个),即除右括号之外的任何字符。换句话说,直到下一个右括号。

于 2013-07-03T04:41:45.127 回答
2

[^)]+- 表示 1 个或多个不带右括号的字符。

所以对于filter: alpha(opacity=50)字符串/opacity=([^)]+)/将匹配50

于 2013-07-03T04:41:45.690 回答
1

/终止正则表达式,该[1]部分提取数组中的第二个索引。(在这种情况下是第二场比赛)

于 2013-07-03T04:41:53.813 回答
1

你几乎做对了。 [^)]+表示再匹配一个非“)”字符。

是的,/标志着正则表达式的结束。

于 2013-07-03T04:42:07.943 回答
1

[)]匹配右括号,同时[^)]匹配除括号之外的任何内容。他们是对立的。[^)]+贪婪地匹配任意数量的非右括号的连续字符。

于 2013-07-03T04:42:57.290 回答