2010-07-15 6 views
2

Je suis en train de prendre une chaîne de texte et de créer un tableau de sorte que la chaîne:Cassez une chaîne en texte/http liens

var someText='I am some text and check this out! http://blah.tld/foo/bar Oh yeah! look at this too: http://foobar.baz'; 

insérer regex magique ici et

le tableau ressemblerait à ceci:

theArray[0]='I am some text and check this out! ' 
theArray[1]='http://blah.tld/foo/bar' 
theArray[2]=' Oh yeah! look at this too: ' 
theArray[3]='http://foobar.baz' 

Je suis à une perte, toute aide serait grandement appréciée

--Er ic

+0

Voulez-vous dire que les chaînes doivent être séparées chaque fois qu'une URL est trouvée? – kiamlaluno

+0

Je connais la corde, j'ai besoin de la casser et de la remettre ensemble, encore et encore – Eric

Répondre

2

de Split par URL regex (grâce à @Pullet d'avoir signalé un défaut ici):

var urlPattern = /(https?\:\/\/\S+[^\.\s+])/; 
someText.split(urlPattern); 

Décomposons la regex :)

 
(https? -> has "http", and an optional "s" 
\:\/\/  -> followed by :// 
\S+  -> followed by "contiguous" non-whitespace characters (\S+) 
[^\.\s+]) -> *except* the first ".", or a series of whitespace characters (\s+) 

Traversant votre échantillon de texte donne,

["I am some text and check this out! ", 
"http://blah.tld/foo/bar", 
" Oh yeah! look at this too: ", 
"http://foobar.baz", 
""] 
+0

Anurag, merci beaucoup - ça a fait l'affaire! Bien que j'ai encore du mal à le lire! – Eric

+0

@Eric - regexes sont amusants :), mis à jour avec l'explication – Anurag

+0

/(https*\:\/\/+S+[ ^\.\s+])/ correspondrait également à httpssss: //test.com qui n'est pas valide url. Je pense que ce qui est recherché est /(https?\:\/\/+S+[^\.\s+])/ Le? signifie que le caractère précédent est facultatif Cependant, si vous vouliez prendre en charge d'autres protocoles, quelque chose comme le suivant fonctionnerait également (en fonction du nombre de protocoles que vous devez prendre en charge) /((https? | s? ftp | gopher) \: \/\/\ S + [^ \. \ S +])/ –

0

Essayez ceci:

<script type="text/javascript"> 
    var url_regex = /((?:ftp|http|https):\/\/(?:\w+:{0,1}\w*@)?(?:\S+)(?::[0-9]+)?(?:\/|\/(?:[\w#!:.?+=&%@!\-\/]))?)+/g; 
    var input = "I am some text and check this out! http://blah.tld/foo/bar Oh yeah! look at this too: http://foobar.baz"; 

    var results = input.split(url_regex); 
    console.log(results); 
</script> 

résultats =

["I am some text and check this out! ", 
"http://blah.tld/foo/bar", 
" Oh yeah! look at this too: ", 
"http://foobar.baz", ""] 

Vous pouvez couper les résultats individuels trop, pour ne pas avoir les espaces avant et sur les entrées non-url.

Questions connexes