2010-03-22 2 views
0

Quelqu'un peut-il m'aider à écrire une expression régulière pour remplacer ces caractères par une chaîne vide. La liste des caractères est donnée ci-dessous.Comment utiliser l'expression régulière en JavaScript pour remplacer un ensemble de caractères avec une chaîne vide?

public static char[] delimiters = { ' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#' }; 
+2

Aucune expression régulière n'est nécessaire pour cela. – Ikke

+0

pouvez-vous être un peu descriptif pour résoudre mon scénario? – RoadKin

+0

Voulez-vous supprimer toutes les occurrences de l'un de ces caractères d'une chaîne donnée? – Alsciende

Répondre

1

Voici le regex que vous voulez :

var re = /[ \r\n?!;.,`:(){}\[\]\|\'\\[email protected]><&%-\/#]/g; 

Par exemple:

var test = "j a\nv\ra?s!c;r.i,p`t:I(s)A{w}e[s]o|m'e\\[email protected]><&%-/#"; 
test.replace(re, '') 

>>> "javascriptIsAwesome" 

FYI, la notation générale pour ce genre de chose dans les expressions régulières est "/[...]/" - signifie, "correspondre à n'importe quel caractère entre les parenthèses"

2
var in = "..."; 
var out = in.replace(/[ \r\n?!:;\-(){}\[\]\\'"[email protected]><&%\/#]+/g, ''); 

je peut-être manqué quelques personnages.

Une autre solution peut être de prendre une liste blanche plutôt que l'approche de liste noire:

var out = in.replace(/[^\w]+/g, ''); 

Cela permettra d'éliminer tout ce qui n'est pas un caractère de mot, ce qui signifie une lettre (majuscule ou minuscule), chiffre ou soulignement.

+0

Cela ne fonctionne pas. J'ai essayé, il ne peut pas donner la chaîne remplacée. de toute façon merci pour l'effort – RoadKin

+0

Je veux remplacer seulement les caractères (strictement) mentionnés dans la liste. – RoadKin

1

Essayez ceci:

var delimiters = [' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#'], 
    re = new RegExp("[" + delimiters.join("").replace(/[-\\\]]/g, "\\$&") + "]", "g"); 
str = str.replace(re, ""); 
0

Cela pourrait être trop agressif.

/[^A-z0-9]/g 
+0

Je souhaite remplacer uniquement les caractères (strictement) mentionnés dans la liste. – RoadKin

+0

OK, auquel cas n'utilisez pas ce qui précède. –

1

Dans votre cas, j'écrire une fonction qui échappe à tout caractère qui pourrait avoir une signification particulière dans une expression rationnelle, applique l'expression régulière et renvoie le résultat:

String.prototype.exclude = function(blacklist) { 
    for(var i=0; i<blacklist.length; i++) { 
     if(blacklist[i].match(/\W/)) { 
      blacklist[i] = '\\'+blacklist[i]; 
     } 
    } 
    return this.replace(new RegExp('['+blacklist.join('')+']', 'g'), ''); 
}; 

var myString = "j a\nv\ra?s!c;r.i,p`t:I(s)A{w}e[s]o|m'e\\[email protected]><&%-/#"; 

myString.exclude([' ', '\r', '\n', '?', '!', ';', '.', ',', '`', ':', '(', ')', '{', '}', '[', ']', '|', '\'', '\\', '~', '=', '@', '>', '<', '&', '%', '-', '/', '#']); 

// returns "JavascriptIsAwesome" which is of course the correct answer 
Questions connexes