2012-07-08 4 views
0

J'ai une chaîne faite comme ceci: "http://something.org/dom/My_happy_dog_%28is%29cool!"Expression regex Javascript pour remplacer plusieurs chaînes?

Comment puis-je supprimer tout le domaine initial, le trait de soulignement multiple et le pourcentage?

Pour l'instant je fais juste un multiple remplacer, comme

str = str.replace("http://something.org/dom/",""); 
str = str.replace("_%28"," "); 

et aller plus loin, mais il est vraiment moche .. toute aide?

Merci!

EDIT: "Mon chien heureux est cool"

l'entrée exacte serait donc je voudrais me débarrasser de l'adresse initiale et supprimer les underscores et le pourcentage et mettre les espaces au bon endroit!

Le problème est que d'essayer de mettre une regex sur Chrome "quelque chose ne va pas". Est-ce un problème de Chrome ou de mon regex?

+0

Quelle sortie voulez-vous de l'entrée donné? –

Répondre

1

Je suggère:

var str = "http://something.org/dom/My_happy_dog_%28is%29cool!"; 
str.substring(str.lastIndexOf('/')+1).replace(/(_)|(%\d{2,})/g,' '); 

JS Fiddle demo.

La raison pour laquelle j'ai pris cette approche est que RegEx est assez cher, et est souvent difficile à régler au point où les cas de bord deviennent moins gênants; J'ai donc choisi d'utiliser une manipulation de chaîne simple pour réduire le travail RegEx.

efficacement le crée au-dessus d'une sous-chaîne de la donnée str variable à partir du point d'indice de la lastIndexOf('/') (qui fait exactement ce que vous attendez) et en ajoutant 1 que si la sous-chaîne est du point après la / pas avant.

Le regex: (_) correspond à la underscores, le | sert comme un opérateur or et (%\d{2,}) sert à correspondre à des caractères numériques qui se produisent deux fois de suite et de suivre un signe %.

Les parenthèses autour de chaque partie de l'expression régulière autour de l'|, servent à identifier les groupes correspondant, qui sont utilisés pour identifier les pièces doivent être remplacées par la chaîne ' ' (single-espace) dans la seconde des arguments passés à replace() .

Références:

+0

Réponse très claire et bien expliquée! Merci! – Enrichman

+0

Vous êtes les bienvenus, je suis heureux de pouvoir vous aider! Et merci * vous * pour l'acceptation. =) –

1

Vous pouvez utiliser unescape pour décoder les pourcentages:

str = unescape("http://something.org/dom/My_happy_dog_%28is%29cool!") 
str = str.replace("http://something.org/dom/",""); 
+0

L'instance multiple de ...? – Jay

+0

Désolé, appuyez sur Entrée avant la fin de la question! Les instances multiples des caractères de soulignement? J'ai essayé sur jsfiddle ths regex: str.replace (/ _/g, ""); et ça marche, mais sur Chrome (en mode inspecter) ça ne marche pas ("quelque chose s'est mal passé"). Un problème de Chrome ou de l'expression régulière est-il faux? – Enrichman

+0

Je viens de l'essayer dans mon inspecteur Chrome et ça a bien fonctionné. Peut-être pourriez-vous essayer d'enregistrer le code dans les balises '

0

ok, si vous voulez remplacer tout ce genre de choses, je pense que vous auriez besoin de quelque chose comme ceci:

/(http:\/\/.*\.[a-z]{3}\/.*\/)|(\%[a-z0-9][a-z0-9])|_/g 

test

var string = "http://something.org/dom/My_happy_dog_%28is%29cool!"; 
string = string.replace(/(http:\/\/.*\.[a-z]{3}\/.*\/)|(\%[a-z0-9][a-z0-9])|_/g,""); 
Questions connexes