2014-07-15 26 views
0

没有人知道为什么我总是在执行JS方法时在Firefox控制台中得到“TypeError:str.match(...)为null”?总是得到“TypeError:str.match(...)为null”

function checkBreakPoints() { 
    var str = '@media only screen and (max-width:2em)'; 
    var patt1 ="/@media[A-z, 0-9, \-,: , .,), (]*width:/gi"; 
    console.log(str.match(patt1).length); 
} 

感谢您的帮助

+0

字符类不是用逗号分隔的...... –

+1

此外,'patt1'不应该在引号中。 – Andy

回答

3

除了你无效的字符类语法(应该是[A-Za-z0-9:.()-]),那么主要的问题是你正在创建一个字符串,而不是一个正则表达式文字。从中删除引号。

var patt1 = /@media[A-Z0-9:.()-]*width:/gi; 
+0

由于它不区分大小写,它只需要是/ @ media [A-Z0-9 :. () - ] * width:/ gi'或'/ @ media [a-z0-9 :. () - ] * width:/ gi' – RevanProdigalKnight

+0

@RevanProdigalKnight Correctamundo!一个我从未使用过的词,可能永远不会再使用... –

-1

http://www.w3schools.com/jsref/jsref_match.asp

它说,str.match(patt1)将返回null如果没有匹配的,所以你不能做:null.length

检查到在做之前看它是否不为零.length

var a = "hi", b = "no", c = a.match(b); 
console.log(c.length); 

错误。

虽然OP想要创建的模式做得不正确,但他想要创建一个正则表达式,我的回答对于他为什么字符串没有正确比较并返回null的基本问题听起来很合理。匹配的def表示它正在寻找一个正则表达式,例如/[a-z]+/而不是一个字符串。

+0

会喜欢我为什么给一个downvote的原因。谢谢。 – Fallenreaper

相关问题