Rumah > hujung hadapan web > tutorial js > Mengapa Saya Perlu Melarikan Diri Berganda Apabila Menggunakan Pembina RegExp JavaScript?

Mengapa Saya Perlu Melarikan Diri Berganda Apabila Menggunakan Pembina RegExp JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-31 08:50:09
asal
590 orang telah melayarinya

Why Should I Double-Escape Strings When Using the JavaScript RegExp Constructor?

Menyahmistikan Keperluan Double Escape untuk Rentetan dalam RegExp Constructor

Apabila membina ungkapan biasa menggunakan pembina RegExp, adalah penting untuk double-escape rentetan literal untuk memastikan ia ditafsirkan dengan betul. Keperluan ini berpunca daripada fakta bahawa penghurai rentetan JavaScript menggunakan garis miring ke belakang awal, menyebabkan enjin ungkapan biasa tidak mengetahui tujuan yang dimaksudkan.

Untuk menggambarkan ini, pertimbangkan contoh berikut:

const res = new RegExp('(\s|^)' + foo).test(moo);
Salin selepas log masuk

Dalam keadaan ini, rentetan literal '(\s|^)' foo diserahkan kepada pembina RegExp untuk mencipta ungkapan biasa. Walau bagaimanapun, garis miring ke belakang awal digunakan oleh penghurai rentetan, meninggalkan 's|^)' foo untuk enjin ungkapan biasa. Input yang tidak dijangka ini boleh menyebabkan salah tafsir.

Contoh konkrit salah tafsir sedemikian berlaku apabila menggunakan satu pelarian untuk watak istimewa, seperti .:

const string = '.*';
console.log(string);
Salin selepas log masuk

Dalam kes ini, niat adalah untuk memadankan mana-mana watak menggunakan . kad bebas. Walau bagaimanapun, sejak digunakan oleh penghurai rentetan, . tidak lagi dianggap sebagai kad bebas tetapi sebagai titik literal. Ini membawa kepada ungkapan biasa yang salah yang hanya sepadan dengan aksara titik.

Untuk mengelakkan salah tafsir ini, rentetan melarikan diri dua kali yang diberikan kepada pembina RegExp adalah penting. Dengan meletakkan garis miring ke belakang tambahan sebelum setiap aksara khas, anda memastikan bahawa enjin ungkapan biasa menghuraikan urutan melarikan diri yang dimaksudkan dengan betul.

Dalam contoh di bawah, melarikan diri berganda digunakan:

const string = '(\s|^)' + foo;
console.log(string);
Salin selepas log masuk

Ini membina ungkapan biasa dengan betul dengan mengekalkan urutan pelarian yang dimaksudkan, memastikan gelagat pemadanan yang tepat. Ingat, apabila menggunakan pembina RegExp dengan literal rentetan, sentiasa melarikan diri dua kali untuk mengelakkan tafsiran aksara khas yang tidak dijangka.

Atas ialah kandungan terperinci Mengapa Saya Perlu Melarikan Diri Berganda Apabila Menggunakan Pembina RegExp JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan