Bagaimana untuk menggunakan pembolehubah dalam ungkapan biasa?
P粉763748806
P粉763748806 2023-08-23 15:12:16
0
2
546
<p>Saya ingin mencipta kaedah <kod>String.replaceAll()</code> dalam JavaScript dan saya fikir menggunakan ungkapan biasa adalah cara yang paling bersih. Walau bagaimanapun, saya tidak tahu bagaimana untuk menghantar pembolehubah kepada ungkapan biasa. Saya sudah boleh melakukan ini, menggantikan semua contoh <code>"B"</code> dengan <code>"A"</code>. </p> <pre class="brush:php;toolbar:false;">"ABABAB".replace(/B/g, "A");</pre> <p>Tetapi saya mahu melakukan sesuatu seperti ini: </p> <pre class="brush:php;toolbar:false;">String.prototype.replaceAll = function(replaceThis, withThis) { this.replace(/replaceThis/g, withThis); };</pre> <p>Tetapi nampaknya ini hanya akan menggantikan teks <kod>"replaceThis"</code>... Jadi bagaimanakah saya hendak menghantar pembolehubah ini ke dalam rentetan regex saya? </p>
P粉763748806
P粉763748806

membalas semua(2)
P粉141455512

Seperti yang disebut oleh Eric Wendelin, anda boleh melakukan ini:

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

Ini akan menghasilkan “正则表达式匹配。”。但是,如果 str1 是 ".",则会失败。您期望结果为“模式匹配正则表达式”,用“正则表达式”替换句点, tetapi hasilnya akan menjadi...

regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

Ini kerana, walaupun "." ialah rentetan, dalam pembina RegExp ia masih ditafsirkan sebagai ungkapan biasa, mewakili sebarang aksara bukan baris baharu, mewakili setiap aksara dalam rentetan. Untuk tujuan ini, fungsi berikut mungkin berguna:

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

Kemudian anda boleh melakukan ini:

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

menghasilkan“模式匹配正则表达式”.

P粉318928159

Anda boleh membina RegExp baharu:

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

Anda boleh mencipta objek ekspresi biasa secara dinamik dengan cara ini. Kemudian anda akan lakukan:

"mystring1".replace(re, "newstring");
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!