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?

161
demandé sur Ed Cottrell 2013-05-16 04:08:40

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.

326
répondu Doorknob 2015-07-04 00:36:37

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];})
40
répondu Christophe 2013-05-16 06:57:29

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.

24
répondu Mark Reed 2013-05-16 01:34:15

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

22
répondu Voicu 2017-06-10 16:06:07

, 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')
2
répondu Tapan Bala 2016-03-30 05:41:35

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.

2
répondu Hrishikesh Kale 2018-07-12 10:50:56

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, " ");

Javascript RegExp

1
répondu Michael Sanchez 2013-05-16 00:16:54

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;
}
1
répondu Beejor 2015-05-05 13:31:55

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!

1
répondu Tran Hung 2018-03-23 16:16:21

Vous pouvez simplement essayer ceci:

str.replace(/[.-#]/g, 'replacechar');

Cela remplacera .- et # avec votre replacechar !

0
répondu karim somai 2016-09-09 14:36:36

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

0
répondu Hafsul Maru 2017-11-16 12:10:45