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?

3voto

Tapan Bala Punkte 39

Sie könnten auch dies versuchen:

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 bezieht sich auf den zu findenden Text und replace auf den Text, der damit ersetzt werden soll

Dies ersetzt Groß- und Kleinschreibung. Um es anders zu machen, ändern Sie einfach die Regex-Flags wie erforderlich. Zum Beispiel, für eine Groß-/Kleinschreibungssensitive Ersetzung:

new RegExp(find[i], 'g')

2voto

Hafsul Maru Punkte 383

Ihr String = '#Bitte_senden_Sie_ein_Informationspaket_an_die_folgende_Adresse:';

Ersetzen Sie '#' durch '' und ersetzen Sie '_' durch ein Leerzeichen

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

newstring2 ist Ihr Ergebnis

2voto

Michael Sanchez Punkte 1215

Sie können auch ein RegExp-Objekt an die replace-Methode übergeben wie

var regexUnderscore = new RegExp("_", "g"); //zeigt globales Suchen an
var regexHash = new RegExp("#", "g");

string.replace(regexHash, "").replace(regexUnderscore, " ");

Javascript RegExp

2voto

David Spector Punkte 1194

Hier ist eine „sichere HTML“-Funktion unter Verwendung einer „reduce“-Funktion für mehrfache Ersetzungen (diese Funktion wendet jede Ersetzung auf den gesamten String an, sodass Abhängigkeiten zwischen den Ersetzungen signifikant sind).

// Test:
document.write(SafeHTML('\n\
    x'));

function SafeHTML(str)
    {
    const replacements = [
        {'&':'&'},
        {'<':'<'},
        {'>':'>'},
        {'"':'"'},
        {"'":'''},
        {'`':'`'},
        {'\n':''},
        {' ':' '}
        ];
    return replaceManyStr(replacements,str);
    } // HTMLToSafeHTML

function replaceManyStr(replacements,str)
    {
    return replacements.reduce((accum,t) => accum.replace(new RegExp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]]),str);
    }

2voto

Kev Punkte 15003

Zum Ersetzen durch nichts ist tckmn's Antwort die beste.

Wenn Sie mit spezifischen Zeichenfolgen ersetzen müssen, die den Treffern entsprechen, hier eine Variation von Voicus und Christophe's Antworten, die vermeidet, das, was übereinstimmt, zu duplizieren, so dass Sie nicht daran denken müssen, neue Übereinstimmungen an zwei Stellen hinzuzufügen:

const replacements = {
  '’': "'",
  '“': '"',
  '”': '"',
  '—': '---',
  '–': '--',
};
const replacement_regex = new RegExp(Object
  .keys(replacements)
  // escape any regex literals found in the replacement keys:
  .map(e => e.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
  .join('|')
, 'g');
return text.replace(replacement_regex, e => replacements[e]);

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