Heim  >  Fragen und Antworten  >  Hauptteil

Wie verwende ich Variablen in regulären Ausdrücken?

<p>Ich möchte eine <code>String.replaceAll()</code>-Methode in JavaScript erstellen und denke, dass die Verwendung regulärer Ausdrücke der sauberste Weg ist. Allerdings weiß ich nicht, wie man Variablen an den regulären Ausdruck übergibt. Ich kann dies bereits tun, indem ich alle Instanzen von <code>"B"</code> durch <code>"A"</code> ersetze. </p> <pre class="brush:php;toolbar:false;">"ABABAB".replace(/B/g, "A");</pre> <p>Aber ich möchte so etwas machen: </p> <pre class="brush:php;toolbar:false;">String.prototype.replaceAll = function(replaceThis, withThis) { this.replace(/replaceThis/g, withThis); };</pre> <p>Aber anscheinend ersetzt dies nur den Text <code>"replaceThis"</code>... Wie übergebe ich diese Variable also in meinen Regex-String? </p>
P粉763748806P粉763748806424 Tage vor577

Antworte allen(2)Ich werde antworten

  • P粉141455512

    P粉1414555122023-08-24 10:47:54

    正如 Eric Wendelin 提到的,你可以这样做:

    str1 = "pattern"
    var re = new RegExp(str1, "g");
    "pattern matching .".replace(re, "regex");

    这会产生“正则表达式匹配。”。但是,如果 str1 是 ".",则会失败。您期望结果为“模式匹配正则表达式”,用“正则表达式”替换句点,但结果会是...

    regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

    这是因为,虽然 "." 是一个字符串,但在 RegExp 构造函数中它仍然被解释为正则表达式,表示任何非换行符,表示字符串中的每个字符。为此,以下函数可能有用:

    RegExp.quote = function(str) {
         return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
     };

    然后你可以这样做:

    str1 = "."
    var re = new RegExp(RegExp.quote(str1), "g");
    "pattern matching .".replace(re, "regex");

    产生“模式匹配正则表达式”

    Antwort
    0
  • P粉318928159

    P粉3189281592023-08-24 10:01:04

    您可以构造一个新的 RegExp 对象:

    var replace = "regex\\d";
    var re = new RegExp(replace,"g");

    您可以通过这种方式动态创建正则表达式对象。然后你会做:

    "mystring1".replace(re, "newstring");

    Antwort
    0
  • StornierenAntwort