2010-12-30 5 views
3

Mögliche Duplizieren:
How to replace plain URLs with links?-Extrakt und einen Link hinzufügen URLs in Zeichenfolge

ich mehrere Strings haben, die Links in ihnen haben. Zum Beispiel:

var str = "I really love this site: http://www.stackoverflow.com" 

und ich brauche einen Link-Tag hinzufügen, dass so wird die str sein:

I really love this site: <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> 

ich dort vorstellen, dass einige regex beteiligt sein, aber ich kann sie nicht zu arbeite für mich mit match(). Jede andere Ideen

+0

Einfache reguläre Ausdrücke sind eine naive Annäherung an dieses Problem und werden viele Tests für Randfälle nicht bestehen. Wenn Sie URLs erkennen, ist es IMMER besser, sich auf eine spezialisierte Bibliothek zu verlassen. [Hier ist warum] (http://stackoverflow.com/a/21925491/1269037). –

+0

Ich habe diese Bibliothek erstellt, die jedem helfen kann, der auf dieser Seite nach einer Lösung sucht: http://ali-saleem.github.io/anchorme.js/ –

Antwort

9

das einfach:

str.replace(/(http:\/\/[^\s]+)/gi , '<a href="$1">$1</a>') 

Ausgang:

I really love this site: <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> 
+1

+1 für den Einzeiler – kelloti

+0

Der obige Code wird viele Fehler enthalten Tests für Randfälle. Wenn Sie URLs erkennen, ist es IMMER besser, sich auf eine spezialisierte Bibliothek zu verlassen. [Hier ist warum] (http://stackoverflow.com/a/21925491/1269037). –

+0

@DanDascalescu Ich stimme zu –

3
function replaceURL(val) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return val.replace(exp,"<a href='$1'>$1</a>"); 
} 
+0

+1 für den komplizierten Regex. wusste nicht js hatte den \ b Marker oder ich hätte es benutzt –

+0

Der obige Code wird viele Tests für Randfälle nicht bestehen. Wenn Sie URLs erkennen, ist es IMMER besser, sich auf eine spezialisierte Bibliothek zu verlassen. [Hier ist warum] (http://stackoverflow.com/a/21925491/1269037). –

0

ich denken kann schnell und schmutzig Regular Expression basierte Lösung. Etwas in den Linien von

Ich habe es noch nicht getestet, also braucht etwas verfeinern.

+0

Reguläre Ausdrücke wie diese werden viele Tests für Randfälle nicht bestehen. Wenn Sie URLs erkennen, ist es IMMER besser, sich auf eine spezialisierte Bibliothek zu verlassen. [Hier ist warum] (http://stackoverflow.com/a/21925491/1269037). –

Verwandte Themen