Quelqu'un a-t-il des suggestions pour détecter les URL dans un ensemble de chaînes?
arrayOfStrings.forEach(function(string){
// detect URLs in strings and do something swell,
// like creating elements with links.
});
Mise à jour: J'ai fini par utiliser cette regex pour la détection de lien… Apparemment plusieurs années plus tard.
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
L'assistant complet (avec support optionnel du guidon) est au numéro de référence 1654670 .
javascript
regex
url
arbales
la source
la source
Réponses:
Vous avez d'abord besoin d'une bonne regex qui correspond aux URL. C'est difficile à faire. Voir ici , ici et ici :
Quoi qu'il en soit, cette réponse n'est pas destinée à vous donner la meilleure expression régulière, mais plutôt une preuve de la façon de faire la chaîne enveloppant à l'intérieur du texte, avec JavaScript.
OK alors utilisons simplement celui-ci:
/(https?:\/\/[^\s]+)/g
Encore une fois, c'est une mauvaise regex . Il aura de nombreux faux positifs. Cependant, c'est assez bon pour cet exemple.
Donc, en résumé, essayez:
la source
.replace
: |text="Find me at http://www.example.com, and also at http://stackoverflow.com."
résultats de ponctuation de fin dans deux 404. Certains utilisateurs en sont conscients et ajouteront un espace après les URL avant la ponctuation pour éviter la rupture, mais la plupart des linkifiers que j'utilise (Gmail, etherpad, phabricator) séparent la ponctuation de fin de l'URL.Voici ce que j'ai fini par utiliser comme regex:
Cela n'inclut pas la ponctuation de fin dans l'URL. La fonction de Crescent fonctionne comme un charme :) donc:
la source
urlRegex
devrait être défini à l' extérieurlinkify
car la compilation coûte cher.()
dans chaque liste de personnages et cela fonctionne maintenant.J'ai cherché sur Google ce problème pendant un certain temps, puis il m'est venu à l'esprit qu'il existe une méthode Android, android.text.util.Linkify, qui utilise des expressions régulières assez robustes pour y parvenir. Heureusement, Android est open source.
Ils utilisent quelques modèles différents pour faire correspondre différents types d'URL. Vous pouvez tous les trouver ici: 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
Si vous êtes simplement préoccupé par les URL qui correspondent au WEB_URL_PATTERN, c'est-à-dire les URL conformes à la spécification RFC 1738, vous pouvez utiliser ceci:
Voici le texte intégral de la source:
Si vous voulez être vraiment sophistiqué, vous pouvez également tester les adresses e-mail. Le regex pour les adresses e-mail est:
PS: Les domaines de premier niveau pris en charge par l'expression régulière ci-dessus sont à jour en juin 2007. Pour une liste à jour, vous devrez vérifier https://data.iana.org/TLD/tlds-alpha-by-domain.txt .
la source
a-zA-Z
ethttp|https|Http|Https|rtsp|Rtsp
.Basé sur la réponse Crescent Fresh
si vous souhaitez détecter des liens avec http: // OU sans http: // et par www. vous pouvez utiliser ce qui suit
la source
Cette bibliothèque sur NPM semble assez complète https://www.npmjs.com/package/linkifyjs
la source
La fonction peut également être améliorée pour rendre les images:
ou pour une image miniature qui renvoie à une image de taille réelle:
Et voici la fonction strip () qui pré-traite la chaîne de texte pour l'uniformité en supprimant tout html existant.
la source
Short Code Big Work! ...
Résultat:-
la source
Il existe un package npm existant: url-regex , installez-le simplement avec
yarn add url-regex
ounpm install url-regex
et utilisez-le comme suit:la source
tmp.innerText n'est pas défini. Vous devez utiliser tmp.innerHTML
la source
essaye ça:
également reconnaître urls tels que
google.com
,http://www.google.bla
,http://google.bla
,www.google.bla
mais pasgoogle.bla
la source
Vous pouvez utiliser une expression régulière comme celle-ci pour extraire les modèles d'URL normaux.
Si vous avez besoin de modèles plus sophistiqués, utilisez une bibliothèque comme celle-ci.
https://www.npmjs.com/package/pattern-dreamer
la source
(?:www\.|(?!www))
? Pourquoi devraitwwwww.com
être invalide?Solution orientée objet générique
Pour les gens comme moi qui utilisent des frameworks comme angular qui ne permettent pas de manipuler directement DOM, j'ai créé une fonction qui prend une chaîne et retourne un tableau de
url
/plainText
objets qui peut être utilisé pour créer n'importe quelle représentation d'interface utilisateur que vous voulez.URL regex
Pour la correspondance d'URL, j'ai utilisé une
h0mayun
expression régulière (légèrement adaptée) :/(?:(?:https?:\/\/)|(?:www\.))[^\s]+/g
Ma fonction supprime également les caractères de ponctuation à la fin d'une URL comme
.
et,
qui, je crois, sera plus souvent une ponctuation réelle qu'une fin d'URL légitime (mais cela pourrait être! Ce n'est pas une science rigoureuse comme d'autres réponses l'expliquent bien) Pour cela, j'applique le suivre l'expression régulière sur les URL correspondantes/^(.+?)([.,?!'"]*)$/
.Code dactylographié
la source
Si vous souhaitez détecter des liens avec http: // OU sans http: // OU ftp OU d'autres cas possibles comme la suppression de la ponctuation de fin à la fin, jetez un œil à ce code.
https://jsfiddle.net/AndrewKang/xtfjn8g3/
Un moyen simple d'utiliser cela est d'utiliser NPM
la source