2017-02-19 1 views
0

Wie können Sie feststellen, ob eine Zeichenfolge ein lokaler Pfad oder eine Referenz zu einem anderen Server ist?Ermitteln, ob eine Zeichenfolge eine Referenz auf eine lokale oder externe Datei ist

Zum Beispiel, mit der folgenden Liste von URLs, wie kann ich feststellen, welche in Bezug auf den lokalen Dateipfad oder auf example.com sind?

var paths = [ 
    'foo/bar.css', 
    '/bar/foo.css', 
    '//cdn.example.com/monkey.css', 
    'https://example.com/banana.css' 
]; 

Ich habe in das Paket url npm sah, kann aber nicht den dritten Weg in ein Objekt analysieren den Host enthält.

Was ich versuche, ist das Extrahieren aller CSS-Informationen von der Seite sowie von verknüpften Stylesheets mit einem Dienstprogramm, das die Seiten-URL allein kennt. Ich muss wissen, wohin man nachfolgende Anträge entweder zum ursprünglichen Wirt oder zu irgendeinem anderen wie example.com sendet

+0

Der dritte ist ungültig! –

+0

Prüfen Sie, ob im Pfad ein ':' steht! –

+0

Dies ist eine Dateireferenz für eine CSS-Datei in einem href-Tag. Es zieht das Stylesheet in Ordnung, und da ich die Kontrolle über die href-Tags nicht habe, brauche ich die URL unabhängig davon. – forrestmid

Antwort

1

Um ein Referenz-URI zu beheben, müssen Sie eine Basis-URL zur Verfügung zu stellen. Nur dann können Sie eine solche URL vollständig interpretieren.

In Ihrem Beispiel hierfür wäre:

var url = require("url"); 
var baseUrl = 'http://www.google.com/thing'; // insert your actual base URL here 
var paths = [ 
    'foo/bar.css', 
    '/bar/foo.css', 
    '//cdn.example.com/monkey.css', 
    'https://example.com/banana.css' 
]; 
paths.forEach((p)=>{ 
    console.log(url.parse(url.resolve(baseUrl,p)).hostname); 
}); 
+0

Ahh. Du bist mein Held. Genau das, was ich gesucht habe. Ich wusste nicht, dass "url.resolve" das tun könnte. Die dafür bereitgestellten Dokumente zeigen keine anderen URLs. – forrestmid

0

Ich würde wahrscheinlich über das Array Schleife und habe eine Reihe von if-Anweisungen. So etwas wie diese (kopieren nicht freundlich einfügen, Pseudo-Code)

function checkPath(string) { 
    if(string.contains("https://") 
    if(string.charArray[0] == "/" && string.charArray[1] == "/") 
    if(string.charArray[0] == "/" && !string.charArray[1] == "/") 
    if(string.charArray[0] != "/") 
} 

Diejenigen, wenn das sollten alle diese Strings in getrennte Funktionen analysiert zu bekommen arbeiten sie nutzen zu können separat behandeln. Verwenden Sie keine Bibliotheken, wenn es so einfach ist, die Funktion selbst zu erstellen.

1

Eine einfache Möglichkeit besteht darin, die Zeichenfolge für http:// oder http:// zu überprüfen. Sie können zusätzliche Suchzeichenfolgen, wie Sie für richtig halten (ftp:// etc.)

var paths = ['foo/bar.css', 
 
      '/bar/foo.css', 
 
      '//cdn.example.com/monkey.css', 
 
      'https://example.com/banana.css']; 
 
       
 
paths.forEach(function(url){ 
 
    var yesNo = (url.indexOf("http:")=== 0 || 
 
       url.indexOf("https:") === 0 || 
 
       url.indexOf("//") === 0 && 
 
       (window.location.protocol === "http:" || window.location.protocol === "https:")) 
 
       ? "" : " NOT"; 
 
    console.log(url + " is" + yesNo + " an external path"); 
 
});

Verwandte Themen