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匹配
答案 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进行一些其他更改。例如,我建议使用\\.
(再次注意在字符串中使用双重转义)来匹配句点而不是使用[.]
。