cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggunakan pembolehubah dalam ungkapan biasa?

<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粉763748806P粉763748806468 hari yang lalu617

membalas semua(2)saya akan balas

  • P粉141455512

    P粉1414555122023-08-24 10:47:54

    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“模式匹配正则表达式”.

    balas
    0
  • P粉318928159

    P粉3189281592023-08-24 10:01:04

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

    balas
    0
  • Batalbalas