JavaScript Regex匹配返回null或undefined

JavaScript Regex match returns null or undefined

本文关键字:null undefined 返回 Regex JavaScript      更新时间:2023-09-26
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匹配

您的斜杠和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);

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

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

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