我有这个javascript用于模式匹配。当我打开HTML文件并运行脚本时,它永远不会结束。页面永远加载。 if
和else
内的日志永远不会打印出来。我无法找到问题所在。
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:
很抱歉,之前的修改现已更正。这是错误的,因为我没有把它放在代码中。
答案 0 :(得分:1)
我建议首先使用JavaScript的URL
object来提取网址的相关部分,而不是使用正则表达式来解析整个网址。然后,您可以使用hostname
检查网址的属性,例如protocol
和if
:
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");
}