检查路径的正则表达式是相对的还是绝对的

Ash*_*tel 5 javascript regex string jquery

我在"a"标签上跟踪onclick事件,onclick函数将获得"a"标签的href attr.我想检查href是绝对路径还是相对路径.是否有任何正则表达式来检查它.

然后是这种模式

"/myfolder/test.txt"
"http://example.com"
"https://example.com"
Run Code Online (Sandbox Code Playgroud)

这是我必须检查的其他模式.

Tho*_*oub 7

你为什么要打扰正则表达式?用途str.startsWith:

console.log("/myfolder/test.txt".startsWith("/"));
console.log("http://example.com".startsWith("/"));
console.log("https://example.com".startsWith("/"));
Run Code Online (Sandbox Code Playgroud)


如果您需要考虑以/或开头的路径的情况~:

console.log(/^([?/~]|mailto.*@.*\.\w+$)/.test("mailto:mail@example.org"));
console.log(/^([?/~]|mailto.*@.*\.\w+$)/.test("~/myfolder/test.txt"));
console.log(/^([?/~]|mailto.*@.*\.\w+$)/.test("/myfolder/test.txt"));
console.log(/^([?/~]|mailto.*@.*\.\w+$)/.test("http://example.com"));
console.log(/^([?/~]|mailto.*@.*\.\w+$)/.test("https://example.com"));
Run Code Online (Sandbox Code Playgroud)


Yos*_*ero 7

这是一个使用URI.js的解决方案#是:

function isAbsoluteUri(str) {
  var uri = new URI(str);
  return uri.is('absolute');
}

console.log(isAbsoluteUri('/myfolder/test.txt'));
console.log(isAbsoluteUri('~/myfolder/test.txt'));
console.log(isAbsoluteUri('?hello=world'));
console.log(isAbsoluteUri('http://example.com'));
console.log(isAbsoluteUri('https://example.com'));
console.log(isAbsoluteUri('ftp://example.com'));
console.log(isAbsoluteUri('mailto:mail@example.com'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.2/URI.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


and*_*der 1

如果您想测试所有锚标记,您可以这样做。正则表达式模式检查是否有任何拼写错误,又称胖手指。

function checkRelpath(){
    var anChrs = $('a');

    $.each(anChrs, function(idx, itm){
        var pattern = new RegExp('/^(http|https|http:|https:|\/\/)/'),
            path = $(itm).prop('href'),
            testPath = pattern.test(path);

        console.log(path);
        console.log(testPath);
    });
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想测试特定的锚点,您可以这样做。

function checkThisRelpath(a){
    var pattern = new RegExp('/^(http|https|http:|https:|\/\/)/'),
        path = $(a).prop('href'),
        testPath = pattern.test(path);

        console.log(path);
        console.log(testPath);
}
Run Code Online (Sandbox Code Playgroud)