Saya ingin membuat String.replaceAll()
metode dalam JavaScript dan saya berpikir bahwa menggunakan regex akan menjadi cara yang paling singkat untuk melakukannya. Namun, saya tidak tahu cara meneruskan variabel ke regex. Saya sudah bisa melakukan ini yang akan menggantikan semua instance "B"
dengan "A"
.
"ABABAB".replace(/B/g, "A");
Tetapi saya ingin melakukan sesuatu seperti ini:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
Tapi jelas ini hanya akan menggantikan teks "replaceThis"
... jadi bagaimana cara saya mengirimkan variabel ini ke string regex saya?
javascript
regex
JC Grubbs
sumber
sumber
Jawaban:
Alih-alih menggunakan
/regex/g
sintaks, Anda bisa membuat objek RegExp baru :Anda dapat secara dinamis membuat objek regex dengan cara ini. Maka Anda akan melakukan:
sumber
/\/word\:\w*$/
, pastikan untuk melarikan diri backslashes Anda:new RegExp( '\\/word\\:\\w*$' )
./
tidak memiliki arti khusus jika Anda membangun regex dari string, jadi Anda tidak perlu menghindarinya./\/word\:\w*$/
seharusnyanew RegExp('/word\\:\\w*$')
Seperti yang disebutkan Eric Wendelin, Anda dapat melakukan sesuatu seperti ini:
Ini menghasilkan
"regex matching ."
. Namun, itu akan gagal jika str1 adalah"."
. Anda akan mengharapkan hasilnya"pattern matching regex"
, menggantikan periode dengan"regex"
, tetapi akan berubah menjadi ...Ini karena, meskipun
"."
adalah sebuah String, dalam konstruktor RegExp itu masih ditafsirkan sebagai ekspresi reguler, yang berarti karakter non-line-break, yang berarti setiap karakter dalam string. Untuk tujuan ini, fungsi berikut mungkin berguna:Maka Anda dapat melakukan:
menghasilkan
"pattern matching regex"
.sumber
-
, dan memasukkan=!:/
.Seperti biasa: jangan gunakan regex kecuali Anda harus. Untuk penggantian string sederhana, idiomnya adalah:
Maka Anda tidak perlu khawatir tentang masalah mengutip yang disebutkan dalam jawaban Gracenotes.
sumber
split
danreplace
dapat mengambil string atauRegExp
objek. Masalah yangreplace
memiliki yangsplit
tidak adalah bahwa ketika Anda menggunakan string Anda hanya mendapatkan penggantian tunggal.Jika Anda ingin mendapatkan SEMUA kejadian (
g
), jangan peka huruf besar-kecil (i
), dan gunakan batas sehingga itu bukan kata di dalam kata lain (\\b
):Contoh:
sumber
rx
interpolasi Emacs / -style, melalui string template.)Bagi siapa pun yang ingin menggunakan variabel dengan metode pencocokan , ini cocok untuk saya
sumber
Ini:
setara dengan ini:
Lihat http://www.w3schools.com/jsref/jsref_obj_regexp.asp .
sumber
pattern
sebagai variabel, dalam 2 sebagai stringsumber
Anda ingin membangun ekspresi reguler secara dinamis dan untuk ini solusi yang tepat adalah menggunakan
new RegExp(string)
konstruktor. Agar konstruktor memperlakukan karakter khusus secara harfiah , Anda harus menghindarinya. Ada fungsi bawaan di widget jQuery UI autocomplete yang disebut$.ui.autocomplete.escapeRegex
:Jika Anda menggunakan jQuery UI, Anda dapat menggunakan fungsi itu, atau menyalin definisi dari sumber :
Dan gunakan seperti ini:
sumber
Uji dengan alat ini
sumber
Uji seperti:
sumber
Berikut ini adalah implementasi ReplAll lainnya:
sumber
Dan versi coffeescript dari jawaban Steven Penny, karena ini adalah hasil google # 2 .... bahkan jika kopi hanya javascript dengan banyak karakter dihapus ...;)
dan dalam kasus khusus saya
sumber
robot.name=hubot
bukan javascript.Meskipun Anda dapat membuat RegExp yang dibuat secara dinamis (sesuai dengan respons lain terhadap pertanyaan ini), saya akan menggemakan komentar saya dari pos serupa : Bentuk fungsional dari String.replace () sangat berguna dan dalam banyak kasus mengurangi kebutuhan untuk objek RegExp yang dibuat secara dinamis. (yang agak merepotkan karena Anda harus mengekspresikan input ke konstruktor RegExp sebagai string daripada menggunakan slash / [AZ] + / format liter regexp)
sumber
Untuk memenuhi kebutuhan saya untuk memasukkan variabel / alias / fungsi ke dalam Ekspresi Reguler, inilah yang saya buat:
di mana 'oldre' adalah regexp asli yang ingin saya masukkan variabel, 'xx' adalah placeholder untuk variabel / alias / fungsi tersebut, dan 'yy' adalah nama variabel aktual, alias, atau fungsi.
sumber
Anda dapat menggunakan ini jika $ 1 tidak bekerja dengan Anda
sumber
Anda selalu dapat menggunakan
indexOf
berulang kali:Ini tidak masuk ke loop tak terbatas ketika penggantian berisi kecocokan.
sumber
Solusi Anda ada di sini:
Lewatkan variabel ke ekspresi reguler.
Salah satu yang telah saya terapkan adalah dengan mengambil nilai dari bidang teks yang ingin Anda ganti dan yang lain adalah bidang teks "ganti dengan", dapatkan nilai dari bidang teks dalam suatu variabel dan mengatur variabel ke RegExp berfungsi untuk mengganti lebih lanjut. Dalam kasus saya saya menggunakan Jquery, Anda juga dapat melakukannya dengan hanya JavaScript juga.
Kode JavaScript:
Kode ini pada acara Onclick tombol, Anda dapat menempatkan ini dalam fungsi untuk memanggil.
Jadi sekarang Anda dapat mengirimkan variabel dalam fungsi ganti.
sumber
Fungsi self-calling ini akan diulang lebih dari replacerItems menggunakan indeks, dan mengubah replacerItems [indeks] secara global pada string dengan setiap pass.
sumber
Tidak ada jawaban yang jelas bagi saya. Saya akhirnya menemukan penjelasan yang bagus di http://burnignorance.com/php-programming-tips/how-to-use-a-variable-in-replace-function-of-javascript/
Jawaban sederhananya adalah:
Sebagai contoh:
sumber
var
sini. Juga, jika Anda lulus\b
atau\1
itu akan rusak.Untuk beberapa penggantian tanpa ekspresi reguler, saya menggunakan yang berikut:
Bagian penting dari solusi ditemukan di sini
sumber