关于理解正则表达式的一些问题

时间:2013-07-03 04:39:01

标签: javascript regex

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

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

[^)]+ - 表示未关闭括号的1个或多个字符。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

[)]匹配右括号,而[^)]匹配任何右括号。他们是对立的。 [^)]+贪婪地匹配任何未关闭括号的连续字符。