Hat jemand Vorschläge zum Erkennen von URLs in einer Reihe von Zeichenfolgen?
arrayOfStrings.forEach(function(string){
// detect URLs in strings and do something swell,
// like creating elements with links.
});
Update: Ich habe diesen regulären Ausdruck zur Linkerkennung verwendet ... Anscheinend einige Jahre später.
kLINK_DETECTION_REGEX = /(([a-z]+:\/\/)?(([a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(\s+|$)/gi
Der vollständige Helfer (mit optionaler Lenkerunterstützung ) befindet sich unter der Nummer 1654670 .
javascript
regex
url
Arbales
quelle
quelle
Antworten:
Zuerst benötigen Sie eine gute Regex, die mit URLs übereinstimmt. Das ist schwer zu machen. Sehen Sie hier , hier und hier :
Wie auch immer, diese Antwort soll Ihnen nicht den besten regulären Ausdruck geben, sondern vielmehr einen Beweis dafür, wie der String mit JavaScript in den Text gewickelt wird.
OK, also lass uns einfach dieses verwenden:
/(https?:\/\/[^\s]+)/g
Auch dies ist eine schlechte Regex . Es wird viele Fehlalarme geben. Für dieses Beispiel ist es jedoch gut genug.
Also in Summe versuchen:
quelle
.replace
: |text="Find me at http://www.example.com, and also at http://stackoverflow.com."
zu zwei 404 führen. Einige Benutzer sind sich dessen bewusst und fügen vor der Interpunktion ein Leerzeichen nach den URLs ein, um einen Bruch zu vermeiden. Die meisten von mir verwendeten Linkifizierer (Google Mail, Etherpad, Phabricator) trennen die nachfolgende Interpunktion von der URL.Folgendes habe ich letztendlich als Regex verwendet:
Dies beinhaltet keine nachgestellte Interpunktion in der URL. Die Funktion von Crescent funktioniert wie ein Zauber :) Also:
quelle
urlRegex
sollte außerhalb definiert werden,linkify
da das Kompilieren teuer ist.()
in jeder Liste von Zeichen hinzugefügt und es funktioniert jetzt.Ich habe dieses Problem eine ganze Weile gegoogelt, dann kam mir der Gedanke, dass es eine Android-Methode gibt, android.text.util.Linkify, die einige ziemlich robuste reguläre Ausdrücke verwendet, um dies zu erreichen. Zum Glück ist Android Open Source.
Sie verwenden einige verschiedene Muster, um verschiedene Arten von URLs abzugleichen. Sie finden sie alle hier: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/text/util/Regex.java#Regex. 0WEB_URL_PATTERN
Wenn Sie sich nur Gedanken über URLs machen, die mit WEB_URL_PATTERN übereinstimmen, dh URLs, die der RFC 1738-Spezifikation entsprechen, können Sie Folgendes verwenden:
Hier ist der vollständige Text der Quelle:
Wenn Sie wirklich ausgefallen sein möchten, können Sie auch nach E-Mail-Adressen suchen. Der reguläre Ausdruck für E-Mail-Adressen lautet:
PS: Die von der obigen Regex unterstützten Top-Level-Domains sind ab Juni 2007 aktuell. Eine aktuelle Liste finden Sie unter https://data.iana.org/TLD/tlds-alpha-by-domain.txt .
quelle
a-zA-Z
undhttp|https|Http|Https|rtsp|Rtsp
.Basierend auf der Antwort von Crescent Fresh
Wenn Sie Links mit http: // ODER ohne http: // und über www erkennen möchten . Sie können Folgendes verwenden
quelle
Diese Bibliothek auf NPM scheint ziemlich umfassend zu sein: https://www.npmjs.com/package/linkifyjs
quelle
Die Funktion kann weiter verbessert werden, um auch Bilder zu rendern:
oder für ein Miniaturbild, das auf ein Bild in voller Größe verweist:
Und hier ist die Funktion strip (), die die Textzeichenfolge zur Vereinheitlichung vorverarbeitet, indem vorhandenes HTML entfernt wird.
quelle
Short Code Big Work! ...
Ergebnis:-
quelle
Es gibt ein vorhandenes npm-Paket: url-regex , installieren Sie es einfach mit
yarn add url-regex
odernpm install url-regex
und verwenden Sie es wie folgt:quelle
tmp.innerText ist undefiniert. Sie sollten tmp.innerHTML verwenden
quelle
Versuche dies:
wird auch Urls wie erkennen
google.com
,http://www.google.bla
,http://google.bla
,www.google.bla
aber nichtgoogle.bla
quelle
Sie können einen solchen regulären Ausdruck verwenden, um normale URL-Muster zu extrahieren.
Wenn Sie komplexere Muster benötigen, verwenden Sie eine solche Bibliothek.
https://www.npmjs.com/package/pattern-dreamer
quelle
(?:www\.|(?!www))
? Warum solltewwwww.com
ungültig sein?Generische objektorientierte Lösung
Für Leute wie mich, die Frameworks wie Angular verwenden, mit denen DOM nicht direkt bearbeitet werden kann, habe ich eine Funktion erstellt, die eine Zeichenfolge verwendet und ein Array von
url
/plainText
Objekten zurückgibt, mit dem Sie eine beliebige UI-Darstellung erstellen können.URL-Regex
Für den URL-Abgleich habe ich verwendet (leicht angepasst)
h0mayun
regulären Ausdruck verwendet:/(?:(?:https?:\/\/)|(?:www\.))[^\s]+/g
Meine Funktion löscht auch Interpunktionszeichen vom Ende einer URL wie
.
und,
ich glaube, dass dies häufiger eine tatsächliche Interpunktion ist als eine legitime URL-Endung (aber es könnte sein! Dies ist keine strenge Wissenschaft, wie andere Antworten gut erklären). Dafür wende ich das an folgende Regex auf übereinstimmende URLs/^(.+?)([.,?!'"]*)$/
.Typoskript-Code
quelle
Wenn Sie Links mit http: // ODER ohne http: // ODER ftp ODER anderen möglichen Fällen wie dem Entfernen von nachgestellten Satzzeichen am Ende erkennen möchten, sehen Sie sich diesen Code an.
https://jsfiddle.net/AndrewKang/xtfjn8g3/
Eine einfache Möglichkeit, dies zu verwenden, ist die Verwendung von NPM
quelle