如何在正規表示式中使用變數?
P粉763748806
P粉763748806 2023-08-23 15:12:16
0
2
606
<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粉763748806
P粉763748806

全部回覆(2)
P粉141455512

正如 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");

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

P粉318928159

您可以建構一個新的 RegExp 物件:

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

您可以透過這種方式動態建立正規表示式物件。然後你會做:

"mystring1".replace(re, "newstring");
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板