Rumah > hujung hadapan web > tutorial js > Mengapa Saya Perlu Menggandakan Melarikan Diri Segaris Belakang dalam Rentetan Pembina RegExp JavaScript?

Mengapa Saya Perlu Menggandakan Melarikan Diri Segaris Belakang dalam Rentetan Pembina RegExp JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-21 19:20:11
asal
189 orang telah melayarinya

Why Do I Need to Double Escape Backslashes in JavaScript RegExp Constructor Strings?

Mengapa Double Escaping Diperlukan untuk Rentetan dalam RegExp Constructor?

Apabila menggunakan RegExp constructor untuk mencipta ungkapan biasa daripada rentetan, adalah penting untuk double-escape khas aksara seperti s yang mewakili watak atau urutan tertentu. Ini kerana aksara sembang ke belakang itu sendiri mempunyai kepentingan istimewa dalam literal rentetan.

Apabila penterjemah menemui garis sengkang terbalik () dalam literal rentetan, ia menganggap watak berikut sebagai watak istimewa. Sebagai contoh, s sepadan dengan aksara ruang putih.

Walau bagaimanapun, jika anda melepasi rentetan sedemikian secara terus tanpa melarikan diri dua kali garisan ke belakang, pembina RegExp mentafsirkan garisan belakang pertama sebagai aksara melarikan diri dalam literal rentetan. Akibatnya, aksara berikut (dalam kes ini) menjadi aksara literal dan corak RegExp yang dimaksudkan tidak dibina dengan betul.

Sebagai contoh, rentetan berikut:

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

ditafsirkan sebagai ungkapan biasa dengan corak "(s|^)" di mana s dianggap sebagai aksara ruang literal, bukan corak ruang putih. Untuk membetulkan isu ini, anda perlu melarikan diri dua kali daripada garis miring ke belakang, seperti yang dilihat dalam contoh berikut:

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

Dalam kes ini, ungkapan (s|^)' pertama kali dibuat sebagai rentetan literal, dan watak sengkang terbalik dianggap sebagai sengkang terbalik literal sebelum dihantar kepada pembina RegExp. Ini memastikan bahawa corak RegExp akhir termasuk corak ruang putih yang dimaksudkan.

Untuk menggambarkan lagi kepentingan melarikan diri dua kali, pertimbangkan contoh berikut:

const string = "(\s|^)" + foo;
console.log(string); // Output: (\s|^)foo
Salin selepas log masuk

Perhatikan bahawa apabila anda jangan melarikan diri dua kali dari garis miring ke belakang, s dianggap sebagai aksara literal dalam rentetan literal, dan outputnya ialah rentetan "(s|^)foo" dan bukannya corak ungkapan biasa yang dimaksudkan. Oleh itu, aksara khas dua kali melarikan diri dalam rentetan yang dihantar kepada pembina RegExp adalah penting untuk membina ungkapan biasa yang diingini dengan tepat.

Atas ialah kandungan terperinci Mengapa Saya Perlu Menggandakan Melarikan Diri Segaris Belakang dalam Rentetan 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