398 Stimmen

Ersetzen Sie mehrere Zeichen in einem replace-Aufruf

Ich muss jede Instanz von '_' durch ein Leerzeichen ersetzen und jede Instanz von '#' durch nichts/leer.

var string = '#Bitte send_an_informationspaket_an_die_folgende_Adresse:';

Ich habe das versucht:

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

Ich mag es nicht wirklich, Befehle wie diese aneinanderzureihen. Gibt es einen anderen Weg, um es in einem zu machen?

697voto

tckmn Punkte 55248

Verwenden Sie den ODER-Operator (|):

var str = '#this #is__ __#a test###__';

console.log(
  str.replace(/#|_/g, '') // "this is a test"
)

Sie könnten auch eine Zeichenklasse verwenden:

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

Fiddle

Wenn Sie das Hashtag durch eine Sache und den Unterstrich durch eine andere ersetzen möchten, müssen Sie sie einfach verketten

function allReplace(str, obj) {
  for (const x in obj) {
    str = str.replace(new RegExp(x, 'g'), obj[x]);
  }
  return str;
};

console.log(
  allReplace( 'abcd-abcd', { 'a': 'h', 'b': 'o' } ) // 'hocd-hocd'
);

Warum nicht verketten? Ich sehe nichts falsch daran.

131voto

Voicu Punkte 14948

Wenn Sie mehrere Zeichen ersetzen möchten, können Sie die String.prototype.replace() mit dem Ersetzungsargument aufrufen, das eine Funktion ist, die für jedes Übereinstimmung aufgerufen wird. Alles was Sie brauchen ist ein Objekt, das die Zeichenzuordnung repräsentiert, die Sie in dieser Funktion verwenden werden.

Zum Beispiel, wenn Sie a mit x, b mit y und c mit z ersetzen möchten, können Sie etwas in dieser Art tun:

const chars = {
  'a': 'x',
  'b': 'y',
  'c': 'z'
};

let s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);

Ausgabe: 234xyz567yyyyxz

63voto

Christophe Punkte 25789

Das Kettenersatz ist cool, warum es ablehnen?

Wie auch immer, hier ist eine weitere Option in einem Austausch:

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

Der Ersatz wird "" wählen, wenn match=="#", " " wenn nicht.

[Update] Für eine generischere Lösung könnten Sie Ihre Ersatzzeichen in einem Objekt speichern:

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

54voto

Mark Reed Punkte 85468

Geben Sie die /g (global) Flagge im regulären Ausdruck an, um alle Treffer zu ersetzen, anstatt nur den ersten:

string.replace(/_/g, ' ').replace(/#/g, '')

Um ein Zeichen durch eine Sache und ein anderes Zeichen durch etwas anderes zu ersetzen, kommen Sie nicht wirklich umhin, zwei separate Aufrufe von replace zu benötigen. Sie können es jedoch in eine Funktion abstrahieren, wie es Doorknob getan hat, obwohl ich wahrscheinlich möchte, dass sie ein Objekt mit altem/neuem als Schlüssel/Wert-Paaren annehmen anstatt eines flachen Arrays.

10voto

Hrishikesh Kale Punkte 6140

Ich weiß nicht, ob das wie viel hilft, aber ich wollte und aus meinem String entfernen

also habe ich verwendet

mystring.replace('',' ').replace('','');

also im Grunde, wenn Sie wollen, dass eine begrenzte Anzahl von Zeichen reduziert wird und keine Zeit verschwendet wird, wird dies nützlich sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X