JavaScript Regex匹配返回null或undefined

时间:2011-12-09 01:03:31

标签: javascript regex firefox

var url_pattern = new RegExp("(?:http| https)://(www.|.*)someurlhere[.]com/\d\d\d\d/\d\d/\d\d/.*/", "i");
var url=window.location; //or could be document.URL both don't work
url.match(url_pattern);

为什么它会返回null,或者是未定义但是当我将正则表达式引入支票时它完美无缺,我只想确保URL匹配

2 个答案:

答案 0 :(得分:6)

https之前,您的斜杠和额外空格存在问题,并且某些句点字符也未正确转义。

使用new RegExp("string")格式时,必须双重转义任何反斜杠。使用/regexhere/语法要容易得多,因为您不必双重转义许多正则表达式规则中使用的反斜杠。

此外,字符串具有名为.match()的正则表达式方法。正则表达式本身有一个名为。test().exec()的方法。我建议这样做:

var url_pattern = /(?:http|https):\/\/(www\.|.*)someurlhere\.com\/\d\d\d\d\/\d\d\/\d\d\/.*\//i;
window.location.href.match(url_pattern);

如果你想继续使用另一种声明方式,你可以逃避这样的反斜杠:

var url_pattern = new RegExp("(?:http|https)://(www\\.|.*)someurlhere[.]com/\\d\\d\\d\\d/\\d\\d/\\d\\d/.*/", "i");
window.location.href.match(url_pattern);

答案 1 :(得分:0)

虽然您应该考虑使用jfriend00建议的/regexhere/语法,但您也可以使用RegExp.new语法来使用RegExp。问题是你在一个字符串中,所以你拥有的任何反斜杠都被认为是字符串本身的转义字符,而不是RegExp。要解决此问题,您应该使用双反斜杠。您的RegExp应更改为:

new RegExp("/(?:http|https)://(www.|.*)someurlhere[.]com/\\d\\d\d\\d/\\d\\d/\\d\\d/.*/", "i");`

您可能还想对RegExp进行一些其他更改。例如,我建议使用\\.(再次注意在字符串中使用双重转义)来匹配句点而不是使用[.]