2011-09-14 10 views
0

Avec ma fonction actuelle:Fonction qui explose la chaîne?

http://piza.com/something retours pizza.com

Comment puis-je changer si elle ne supprime pas ce qui est après / mais garde la suppression http, https et www?

par exemple: http://piza.com/something/1 devrait retourner pizza.com/something/1

function cleanUrl(url) { 
    return url.replace(/^(http(s)?:\/\/)?(www\.)?([^\/]+)(\/.*)?$/gi,"$4"); 
} 
+0

Voulez-vous seulement vous débarrasser du www ou de tous les sous-domaines tous ensemble? – ChrisR

+0

Etes-vous en train d'essayer de supprimer les doubles barres obliques initiales dans quelque chose comme //piza.com/quelque chose? – kinakuta

Répondre

2

Essayez avant de vous demander. Tant de questions regex sur stackoverflow sont fondamentalement 'write my regex'.

Quoi qu'il en soit, quelque chose comme cela devrait fonctionner (non testé):

function cleanUrl(url) { 
    return url.replace(/^(http(s)?:\/\/)?(www\.)?/gi,""); 
} 
+0

honnêtement, je l'aurais essayé, mais je ne comprends pas le code, même le plus léger – lisovaccaro

+0

@ Liso22 http://www.zytrax.com/tech/web/regex.htm et http://net.tutsplus.com/tutorials/javascript-ajax/vous-ne-savez-rien-sur-regular-expressions/:) – Joe

1

Voici quelque chose qui fonctionne.

return url.replace(/(http(s)?:\/\/)?(www\.)?/gi,""); 
0
if (url.indexOf('http://') == 0) url = url.substr(7); 
else if (url.indexOf('https://') == 0) url = url.substr(8); 
if (url.indexOf('www.') == 0) url = url.substr(4); 
return url; 
0
return url.replace(/^(https?:\/\/)?(www\.)?/, ''); 
0

Vous pouvez utiliser ce remplacement d'expression régulière:

var url = "http://piza.com/something/1"; 
var output = url.replace(/^http(s)?:\/\/(www\.)?/, ""); 

Pour expliquer l'expression régulière:

^http - string starts with "http" 
(s)? - followed by an optional "s" in "https" 
:\/\/ - followed by "://" 
(www\.) - followed an an optional "www." 

Ensuite, remplacez partie de ce match que vous avez trouvé avec rien, ne laissant que le reste de l'URL.

0

Je vais également ajouter à la pléthore de réponses (depuis que je l'ai élaboré).

Une petite modification à votre script original fonctionnera:

^(http(s)?:\/\/)?(www\.)?(([^\/]+)(\/.*)?)$ 

de sorte que vous auriez

function cleanUrl(url) { 
    return url.replace(/^(http(s)?:\/\/)?(www\.)?(([^\/]+)(\/.*)?)$/gi,"$4"); 
} 

La principale différence ici est que j'ai changé la partie juste après la vérification de www pour capturer la reste de votre expression régulière en tant que groupe. C'est vraiment tout sur les groupes.

Votre combo string/regex originale ^(http(s)?:\/\/)?(www\.)?([^\/]+)(\/.*)?$ retourné les groupes suivants:

  • 0. http://piza.com/something/1
  • 1. http: //
  • 2. non défini
  • 3. non défini
  • 4. pizza.com
  • 5./quelque chose/1

  • Le combo string/regex révisé ^(http(s)?:\/\/)?(www\.)?(([^\/]+)(\/.*)?)$ Retours:

  • 0. http: // Piza.com/quelque chose/1
  • 1. http: //
  • 2. non défini
  • 3. non défini
  • 4. pizza.com/something/1
  • 5. pizza.com
  • 6 ./quelque chose/1

  • Chaque fois que vous avez une paire de parenthèses vous créez un groupe. Dans votre cas, vous vouliez un groupe qui capturait tout après la partie www, c'est donc là que j'ai créé un nouveau groupe pour capturer tout le reste.

    BTW, vous pouvez facilement essayer ces regex en ligne. J'ai utilisé JavaScript RegExp Example: Regular Expression Tester et appuyez sur le bouton "Show Match" pour voir ce que vos groupes retournaient.

    +0

    Aussi, je sais que le mien fonctionne, je l'ai testé. – Sam