1924 Stimmen

Wie verwendet man eine Variable in einem regulären Ausdruck?

Ich würde gerne eine String.replaceAll() Methode in JavaScript und ich denke, dass die Verwendung einer Regex wäre am knappsten Weg, es zu tun. Allerdings kann ich nicht herausfinden, wie man eine Variable in eine Regex übergeben. Ich kann dies bereits tun, die alle Instanzen von ersetzen wird "B" con "A" .

"ABABAB".replace(/B/g, "A");

Aber ich möchte etwas in dieser Art machen:

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

Aber natürlich wird dadurch nur der Text ersetzt "replaceThis" ...also wie übergebe ich diese Variable an meine Regex-Zeichenkette?

3voto

Paul Chris Jones Punkte 1940

Keine dieser Antworten war für mich eindeutig. Ich fand schließlich eine gute Erklärung unter Wie man eine Variable in der replace-Funktion von JavaScript verwendet

Die Antwort ist einfach:

var search_term = new RegExp(search_term, "g");
text = text.replace(search_term, replace_term);

Zum Beispiel:

$("button").click(function() {
  Find_and_replace("Lorem", "Chocolate");
  Find_and_replace("ipsum", "ice-cream");
});

function Find_and_replace(search_term, replace_term) {
  text = $("textbox").html();
  var search_term = new RegExp(search_term, "g");
  text = text.replace(search_term, replace_term);
  $("textbox").html(text);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textbox>
  Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
</textbox>
<button>Click me</button>

3voto

Diese selbstaufrufende Funktion iteriert über replacerItems unter Verwendung eines Index und ändert replacerItems[index] bei jedem Durchlauf global in der Zeichenkette.

  const replacerItems = ["a", "b", "c"];    

    function replacer(str, index){
          const item = replacerItems[index];
          const regex = new RegExp(`[${item}]`, "g");
          const newStr = str.replace(regex, "z");
          if (index < replacerItems.length - 1) {
            return replacer(newStr, index + 1);
          }
          return newStr;
    }

// console.log(replacer('abcdefg', 0)) will output 'zzzdefg'

3voto

Jason S Punkte 178087

Sie können zwar dynamisch erstellte RegExp's erstellen (wie in den anderen Antworten auf diese Frage), aber ich möchte meinen Kommentar aus einer ähnliche Stelle : Die funktionale Form von String.replace() ist äußerst nützlich und reduziert in vielen Fällen den Bedarf an dynamisch erstellten RegExp-Objekten. (die ziemlich mühsam sind, weil man die Eingabe in den RegExp-Konstruktor als String ausdrücken muss, anstatt das Schrägstrich /[A-Z]+/ Regexp-Literalformat zu verwenden)

2voto

Ry- Punkte 208020

Sie können jederzeit die indexOf wiederholt:

String.prototype.replaceAll = function(substring, replacement) {
    var result = '';
    var lastIndex = 0;

    while(true) {
        var index = this.indexOf(substring, lastIndex);
        if(index === -1) break;
        result += this.substring(lastIndex, index) + replacement;
        lastIndex = index + substring.length;
    }

    return result + this.substring(lastIndex);
};

Dies führt nicht zu einer Endlosschleife, wenn die Ersetzung die Übereinstimmung enthält.

2voto

Ajit Hogade Punkte 1023

Eine Möglichkeit der Implementierung besteht darin, den Wert aus einem Textfeld zu nehmen, das Sie ersetzen möchten, und ein anderes ist das "Ersetzen durch"-Textfeld, den Wert aus dem Textfeld in eine Variable zu bekommen und die Variable auf die RegExp-Funktion zu setzen, um weiter zu ersetzen. In meinem Fall verwende ich jQuery, aber Sie können es auch nur mit JavaScript machen.

JavaScript-Code:

  var replace =document.getElementById("replace}"); // getting a value from a text field with I want to replace
  var replace_with = document.getElementById("with"); //Getting the value from another text fields with which I want to replace another string.

  var sRegExInput = new RegExp(replace, "g");
  $("body").children().each(function() {
    $(this).html($(this).html().replace(sRegExInput,replace_with));
  });

Dieser Code befindet sich im Onclick-Ereignis einer Schaltfläche, und Sie können ihn in eine Funktion einfügen, die Sie aufrufen.

Jetzt können Sie also eine Variable an die Ersetzungsfunktion übergeben.

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