如何检查网址字符串javascript中是否存在url方案

时间:2017-05-02 15:55:49

标签: javascript regex

我正在尝试解决一个问题,我需要知道我的网址字符串前面是否有一个URL方案(不限于http,https)。 我可以做link.indexOf(://);然后在“://”之前取任何子串,但如果我有例如:

example.com?url=http://www.eg.com

在这种情况下,子字符串将返回整个字符串,即 example.com?url=http这是不正确的。它应该返回“”,因为我的网址没有前面的协议。

我需要找出网址是否附加协议。

2 个答案:

答案 0 :(得分:2)

你可以通过一点正则表达式轻松完成。模式/^[a-z0-9]+:\/\//将能够提取它。

如果您只想测试它是否有,请使用pattern.test()获取布尔值:

/^[a-z0-9]+:\/\//.test(url); // true

如果你想要它,请使用url.match()并将协议部分包装在括号中:

url.match(/^([a-z0-9]+):\/\//)[1] // https

这是一个带有一些示例网址的可运行示例。



const urls = ['file://test.com', 'http://test.com', 'https://test.com', 'example.com?http'];

console.log(
  urls.map(url => (url.match(/^([a-z0-9]+):\/\//) || [])[1])
);




答案 1 :(得分:1)

您可以使用大多数浏览器支持的URL API。

function getProtocol(str) {
    try {
        var u = new URL(str);
        return u.protocol.slice(0, -1);
    } catch (e) {
        return '';
    }
}

用法

getProtocol('example.com?url=http://www.eg.com'); // returns ""
getProtocol('https://example.com?url=http://www.eg.com'); // returns "https"