模式匹配永远不会终止

时间:2018-01-09 23:28:01

标签: javascript regex

我有这个javascript用于模式匹配。当我打开HTML文件并运行脚本时,它永远不会结束。页面永远加载。 ifelse内的日志永远不会打印出来。我无法找到问题所在。

var link="https://www.google.co.uk/search?source=hp&ei=EUtVWuX5JpGRkwWW_py4Cg&q=testing+for+schools&oq=testing&gs_l=psy-ab.1.1.0i131k1j0l9.7269.8065.0.9955.7.7.0.0.0.0.175.755.4j3.7.0....0...1.1.64.psy-ab..0.7.754...0i3k1.0.TglIEkPkeIU";
var pattern = "(https:\\/\\/)(.*\\.)*(google.co.uk)(\\/.*)*(\\/)*";

if(link.search(pattern) == 0)
    {
        console.log("inside if");
        console.log("Match");

    }
else
    {
        console.log("inside else");
        console.log("Not Match");
    }

修改 我需要一个代表几乎所有以https开头的URL的RegEx。唯一可变的是域名,例如google.co.uk。我以为我的RegEx很完美,但无法处理这种情况。

EDIT2: 我需要的模式的逻辑是:(any-sub-domain.)*(domain-name)(/something)* (/)*

EDIT3:

很抱歉,之前的修改现已更正。这是错误的,因为我没有把它放在代码中。

1 个答案:

答案 0 :(得分:1)

我建议首先使用JavaScript的URL object来提取网址的相关部分,而不是使用正则表达式来解析整个网址。然后,您可以使用hostname检查网址的属性,例如protocolif

var link = "https://www.google.co.uk/search?source=hp&ei=EUtVWuX5JpGRkwWW_py4Cg&q=testing+for+schools&oq=testing&gs_l=psy-ab.1.1.0i131k1j0l9.7269.8065.0.9955.7.7.0.0.0.0.175.755.4j3.7.0....0...1.1.64.psy-ab..0.7.754...0i3k1.0.TglIEkPkeIU";
var urlObject = new URL(link);

console.log(urlObject.hostname); // "www.google.co.uk"
console.log(urlObject.protocol); // "https:"

if (urlObject.protocol === "https:") {
    if (urlObject.hostname.endsWith('google.co.uk')) {
        console.log("this page is on Google UK");
    } else {
        console.log("this page is on some other HTTPS web site");
    }
} else {
    console.log("this page is not secured by HTTPS");
}
相关问题