web-dev-qa-db-fra.com

Remplacer plusieurs caractères en un seul 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 '#' sans rien/vide.

var string = '#Please send_an_information_pack_to_the_following_address:';

J'ai essayé ceci:

string.replace('#','').replace('_', ' ');

Je n'enchaine pas vraiment les commandes comme celle-ci, mais existe-t-il une autre façon de le faire en même temps?

177
Shannon Hochkins

Utilisez l'opérateur OR (|):

var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"

Vous pouvez également utiliser une classe de personnage:

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

Fiddle

Si vous souhaitez remplacer le hachage par une chose et le trait de soulignement par une autre, il vous suffira de chaî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.

366
Doorknob

Le chaînage est cool, pourquoi le rejeter?

Quoi qu’il en soit, voici une autre option à remplacer:

string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})

Le remplaçant choisira "" si match == "#", "" sinon.

[Mise à jour] 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];})
43
Christophe

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 un élément et un caractère différent par un autre, vous ne pouvez pas réellement vous passer de deux appels distincts à replace. Vous pouvez le résumer en une fonction comme Doorknob l'a fait, bien que je l'aurais probablement pris avec un objet avec ancien/nouveau comme paire clé/valeur au lieu d'un tableau plat. 

27
Mark Reed

Si vous souhaitez remplacer plusieurs caractères, vous pouvez appeler le String.prototype.replace() avec l'argument de remplacement étant une fonction appelée à chaque correspondance. 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 souhaitez que a soit remplacé par x, b avec y et c avec z, vous pouvez procéder comme suit:

var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);

Sortie: 234xyz567yyyyxz

26
Voicu

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 fait référence 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 selon les besoins. Ex: pour les majuscules et minuscules, remplacez: 

new RegExp(find[i], 'g')
2
Tapan Bala

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
Michael Sanchez

Voici un moyen simple de le faire sans RegEx.
Vous pouvez prototyper et/ou mettre en cache des objets à votre guise.

// 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
Beejor

Je ne sais pas si cela aidera, mais je voulais supprimer <b> et </b> de ma chaîne. 

alors j'ai utilisé 

mystring.replace('<b>',' ').replace('</b>','');

donc si vous voulez réduire le nombre de personnages et ne pas perdre de temps, cela vous sera utile. 

1
Hrishikesh Kale

S'il vous plaît essayez:

  • remplacer multi string

    var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, ''); //str is "//.abc.xyz"

  • remplacer plusieurs caractères

    var str = "a.b.c.d,e,f,g,h"; str = str.replace(/[.,]/g, ''); //str is "abcdefgh";

Bonne chance!

1
Tran Hung

yourstring = '#Please send_an_information_pack_to_the_following_address:';

remplacez '#' par '' et remplacez '_' par un espace

var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');

newstring2 est votre résultat

0
Hafsul Maru

Vous pouvez simplement essayer ceci:

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

cela remplacera., - et # avec votre remplacement!

0
karim somai

Voici une autre version utilisant le prototype de chaîne. Prendre plaisir!

String.prototype.replaceAll = function(obj) {
    let finalString = '';
    let Word = this;
    for (let each of Word){
        for (const o in obj){
            const value = obj[o];
            if (each == o){
                each = value;
            }
        }
        finalString += each;
    }

    return finalString;
};

'abc'.replaceAll({'a':'x', 'b':'y'}); //"xyc"
0
PossessWithin