Remplacer plusieurs caractères dans un appel de remplacement
Petite question très simple, mais je ne comprends pas très bien comment le faire.
Je dois remplacer chaque instance de ' _ 'par un espace, et chaque instance de' # ' avec rien / vide.
var string = '#Please send_an_information_pack_to_the_following_address:';
J'ai essayé ceci:
string.replace('#','').replace('_', ' ');
Je ne chaînais pas vraiment des commandes comme celle-ci, mais y a-t-il une autre façon de le faire en une?
11 réponses
Utilisez L'opérateur ou (|
):
var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"
Vous pouvez également utiliser une classe de caractères:
str.replace(/[#_]/g,'');
Violon
Si vous voulez remplacer le hachage par une chose et le trait de soulignement par une autre, vous devrez simplement enchaîner. Cependant, vous pouvez ajouter un prototype:
String.prototype.allReplace = function(obj) {
var retStr = this;
for (var x in obj) {
retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
}
return retStr;
};
console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';
Pourquoi ne pas enchaîner, cependant? Je ne vois rien de mal à cela.
Le chaînage est cool, pourquoi le rejeter?
Quoi Qu'il en soit, voici une autre option dans One replace:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
Le remplacement choisira "" si match=="#", "" sinon.
[Update] pour une solution plus générique, vous pouvez stocker vos chaînes de remplacement dans un objet:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
Spécifiez l'indicateur /g
(global) sur l'expression régulière pour remplacer toutes les correspondances au lieu de la première:
string.replace(/_/g, ' ').replace(/#/g, '')
Pour remplacer un caractère par une chose et un caractère différent par autre chose, vous ne pouvez pas vraiment contourner le besoin de deux appels distincts à replace
. Vous pouvez l'abstraire en une fonction comme L'a fait Doorknob, bien que je l'aurais probablement pris un objet avec old / new comme paires clé / valeur au lieu d'un tableau plat.
Si vous voulez remplacer plusieurs caractères, vous pouvez appeler le String.prototype.replace()
avec le remplacement argument étant une fonction qui est appelée pour chaque match. Tout ce dont vous avez besoin est un objet représentant le mappage de caractères que vous utiliserez dans cette fonction.
Par exemple, si vous voulez a
remplacé par x
, b
avec y
et c
avec z
, vous pouvez faire quelque chose comme ceci:
var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
Sortie: 234xyz567yyyyxz
, Vous pouvez aussi essayer ceci :
function replaceStr(str, find, replace) {
for (var i = 0; i < find.length; i++) {
str = str.replace(new RegExp(find[i], 'gi'), replace[i]);
}
return str;
}
var text = "#here_is_the_one#";
var find = ["#","_"];
var replace = ['',' '];
text = replaceStr(text, find, replace);
console.log(text);
find
renvoie au texte à trouver et replace
au texte à remplacer par
Cela remplacera les caractères insensibles à la casse. Pour faire autrement, il suffit de changer les drapeaux Regex au besoin. Par exemple: pour remplacer sensible à la casse:
new RegExp(find[i], 'g')
Je ne sais pas si cela va aider mais je voulais supprimer <b>
et </b>
de ma chaîne
Donc j'ai utilisé
mystring.replace('<b>',' ').replace('</b>','');
Donc, fondamentalement, si vous voulez qu'un nombre limité de caractères soit réduit et ne perdez pas de temps, cela sera utile.
Vous pouvez également passer un objet RegExp à la méthode replace comme
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
Voici un moyen simple de le faire sans RegEx.
Vous pouvez prototyper et / ou mettre en cache des choses comme vous le souhaitez.
// Example: translate( 'faded', 'abcdef', '123456' ) returns '61454'
function translate( s, sFrom, sTo ){
for ( var out = '', i = 0; i < s.length; i++ ){
out += sTo.charAt( sFrom.indexOf( s.charAt(i) ));
}
return out;
}
S'il vous Plaît essayer:
-
Remplacer multi chaîne
var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, ''); //str is "//.abc.xyz"
-
Remplacer les caractères multiples
var str = "a.b.c.d,e,f,g,h"; str = str.replace(/[.,]/g, ''); //str is "abcdefgh";
Bonne chance!
Vous pouvez simplement essayer ceci:
str.replace(/[.-#]/g, 'replacechar');
Cela remplacera .- et # avec votre replacechar !
Yourstring = ' # Send_an_information_pack_to_the_following_address:';
Remplacer " # " par "et remplacer" _ " par un espace
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
Newstring2 est votre résultat