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");
產生「模式比對正規表示式」
。
P粉3189281592023-08-24 10:01:04
您可以建構一個新的 RegExp 物件:
var replace = "regex\d"; var re = new RegExp(replace,"g");
您可以透過這種方式動態建立正規表示式物件。然後你會做:
"mystring1".replace(re, "newstring");