如果匹配,请获取第一个值

时间:2014-03-01 23:55:02

标签: javascript regex arrays match typeerror

好的,所以我有一个带匹配正则表达式查询的简单变量声明。

var image = decl.val.match(/(url\(.*\))/)[1];

但是我很快发现我无法做到这一点,因为有时没有匹配,而是返回未定义或类似的错误:

Uncaught TypeError: Cannot read property '1' of null

我想尽可能地将其修复为内联,因为我将不得不在我的代码中多次迭代。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您可以这样做,而不是试图找到神奇的1行解决方案:

var m = decl.val.match(/url\(.*\)/);
var image = m ? m[0] : "";

答案 1 :(得分:1)

你可能得到的最短单线是 var image = decl.val.match(/(url\(.*\))/)); image = image ? image[1] : ""
(或者""的首选替代方案。)


哦,好好想想,你还可以再去一点 var image = (image = decl.val.match(/(url\(.*\))/)) ? image[1] : "";
如果你看起来更好......

这是因为变量在JavaScript中被“提升” - 这意味着首先在代码中搜索所有变量声明(在这种情况下为var image)并创建这些变量,并且实际代码是之后才执行。