2011-07-10 5 views
1

Je veux prendre un texte Twitter comme ceci:RegExp pour décaper les URL d'une chaîne

s = "Today 09/07 sunday http://t.co/123 - AC/DC COVER Opening and DVD - woman R$10/man R$15. - http://migre.me/59qwc" 

et la transformer en cette ..

s = "Today 09/07 sunday LINK - AC/DC COVER Opening and DVD - woman R$10/man R$15. - LINK" 

Cet extrait échoue pour une raison quelconque, s'il vous plaît , aide

s.replace(/(http\:.*)\s/g , 'LINK') 
+0

Que signifie "échec" signifie? – jtbandes

+0

Je suppose que son ne remplace rien ... – psynnott

+0

Je m'attendrais à ce qu'il remplace tout de "dimanche" à "http://migre.me/59qwc" avec LINK :) –

Répondre

3

Essayez d'utiliser

/\bhttps?\:\S*/ig 

qui utilise \S* pour correspondre séries de caractères non-espace ne sera donc pas avoir des problèmes correspondant à la fin de l'entrée où il n'y a pas d'espace suivant.

+0

travaillé parfait, merci! –

0

. * mangera tous, y compris les espaces, donc ce trouve tout, jusqu'à ce qu'il ne peut pas aller plus loin, il backtr Acks pour trouver le caractère d'espace unique. Vous devrez faire correspondre uniquement les caractères non-espaces pour l'URL et vous aurez terminé.

+0

N'oubliez pas que l'URL ne doit pas nécessairement se terminer par un espace, en Java j'aurais utilisé des quantificateurs réticents pour y arriver, y compris un fin de l'entrée ($), mais le langage JavaScript semble être moins performant. –

+0

@owistead, '$' fonctionne très bien en JavaScript. En général cependant, vous avez raison. Le langage d'expression rationnelle JavaScript manque certaines choses que 'java.util.regex' a inclus les classes de caractères lookbehind et unicode. –

+0

@mike: Je ne disais pas que $ manquait à JavaScript (cela aurait été bizarre), mais j'aurais inclus $ dans la partie avec les quantificateurs réticents - et ceux * sont * manquants. Bien sûr, cela ne retient pas les gars intelligents comme vous pour donner une réponse sans eux :) –

0

Comme indiqué, .* correspondra aux espaces et remplacera ainsi tout. Selon le système que vous utilisez, vous pouvez vous en passer avec quelque chose comme \S*, qui ne correspond qu'aux caractères non-espaces, ou bien un [^] * plus explicite à la place.

0

Cela devrait dépouiller HTML de votre texte

s.replace(/<.*?>/g, ''); 
+0

C'est une bonne regex pour supprimer _tags_, mais la question initiale demandait de supprimer les URL commençant par "http: //" ou "https: //". –

1

essayer:

input.replace(/http:\/{2}[^\s]+/,"link") 
+0

+1 Cela a juste échoué pour la dernière URL. –