0

我有以下东西 - 我正在尝试获得财产calc(100% - 14px)但没有运气:

var a = 'width:calc(100% - 14px); adsasd';
var b = 'width:calc(100% - 14px]; adsasd';

console.log(a.match('width:calc\(.*?\)$'));
console.log(b.match('width:calc\(.*?\)$'));

示例 http://jsfiddle.net/zFacF/

两个 console.log 都会输出相同的结果

["width:calc(100% - 14px); adsasd", 
 "(100% - 14px); adsasd"] 

["width:calc(100% - 14px]; adsasd", 
 "(100% - 14px]; adsasd"] 

如何calc(100% - 14px)从给定的字符串中获取?

@解决

/width:\s?(calc\(.*\))/

因为 inlinestyle="width: calc(100% - 14px)"没有;和之间的空格widthcalc不匹配。

http://jsfiddle.net/zFacF/5/

4

4 回答 4

1

在你的正则表达式的$末尾是拉伸你的模式匹配直到结束..$描绘了字符串的结尾..

利用width:(calc\(.*?\));

Group 1包含您所需的数据

于 2013-04-14T18:47:14.290 回答
1

如果您还想验证该字符串是否具有相同的形式,请使用:

^width:(calc\(.*\));.*$

第一组 (group[1]) 将包含所需的结果。

如果您不需要验证,请仅使用:

calc\(.*\)

在这种情况下,结果是完全匹配。

于 2013-04-14T19:08:04.763 回答
1

这似乎工作正常:http: //jsfiddle.net/zFacF/1/

$ 使 .* 一直匹配到最后。相反,我添加了一个;来阻止这种情况发生。

于 2013-04-14T18:48:41.270 回答
1

/width:(calc\(.*\))/

如果你想考虑方括号:

/width:(calc[(\[].*[)\]])/

于 2013-04-14T19:09:25.223 回答