搜尋

首頁  >  問答  >  主體

如何在正規表示式中使用變數?

<p>我想在 JavaScript 中建立一個 <code>String.replaceAll()</code> 方法,我認為使用正規表示式是最簡潔的方法。但是,我不知道如何將變數傳遞給正規表示式。我已經可以執行此操作,將 <code>"B"</code> 的所有實例替換為 <code>"A"</code>。 </p> <pre class="brush:php;toolbar:false;">"ABABAB".replace(/B/g, "A");</pre> <p>但我想做這樣的事情:</p> <pre class="brush:php;toolbar:false;">String.prototype.replaceAll = function(replaceThis, withThis) { this.replace(/replaceThis/g, withThis); };</pre> <p>但顯然這只會取代文字<code>「replaceThis」</code>...那麼我該如何將此變數傳遞到我的正規表示式字串中? </p>
P粉763748806P粉763748806501 天前640

全部回覆(2)我來回復

  • 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, "\");
     };

    然後你可以這樣做:

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

    產生「模式比對正規表示式」

    回覆
    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");

    回覆
    0
  • 取消回覆