Wie verwende ich Variablen in regulären Ausdrücken?
P粉763748806
P粉763748806 2023-08-23 15:12:16
0
2
631
<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粉763748806
P粉763748806

Antworte allen(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, "\\$1");
 };

然后你可以这样做:

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");
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage