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?
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,'');
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.
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];})
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.
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
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')
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 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;
}
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.
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!
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
Vous pouvez simplement essayer ceci:
str.replace(/[.-#]/g, 'replacechar');
cela remplacera., - et # avec votre remplacement!
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"