Rumah > hujung hadapan web > tutorial js > Mengapa Saya Perlu Melarikan Diri Rentetan Dua Kali Apabila Menggunakan RegExp Constructor?

Mengapa Saya Perlu Melarikan Diri Rentetan Dua Kali Apabila Menggunakan RegExp Constructor?

Linda Hamilton
Lepaskan: 2024-12-26 03:04:13
asal
555 orang telah melayarinya

Why Do I Need to Escape Strings Twice When Using the RegExp Constructor?

Mengapa Melarikan Diri Rentetan Dua Kali Diperlukan untuk RegExp Constructor

Apabila mencipta ungkapan biasa menggunakan RegExp constructor, satu aksara melarikan diri () ialah tidak mencukupi untuk aksara khas seperti s (ruang putih). Melarikan diri berganda () diperlukan untuk memastikan aksara ini ditafsirkan dengan betul.

Keperluan ini timbul kerana rentetan yang dihantar kepada pembina RegExp pada mulanya diproses sebagai literal rentetan biasa. Dalam literal rentetan, bertindak sebagai watak melarikan diri, membenarkan aksara khas seperti s disertakan secara literal. Walau bagaimanapun, apabila membina ungkapan biasa, aksara melarikan diri pertama digunakan semasa proses penghuraian literal rentetan.

Pertimbangkan contoh berikut:

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

Dalam contoh ini, ungkapan biasa yang dimaksudkan ialah (s|^) diikuti dengan nilai foo. Walau bagaimanapun, pelarian tunggal sebelum s digunakan oleh penghuraian literal rentetan. Ini mengakibatkan rentetan (s|^) digabungkan dengan foo, yang bukan ungkapan biasa yang sah.

Untuk mengelakkan salah tafsir ini, pelarian berganda () digunakan. Watak melarikan diri pertama digunakan oleh penghuraian literal rentetan, manakala watak melarikan diri kedua menunjukkan bahawa watak berikut adalah sebahagian daripada ungkapan biasa dan harus ditafsirkan sedemikian.

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

Dalam kes ini, watak yang dimaksudkan ungkapan biasa (s|^) diikuti dengan foo dibina dengan betul. Melarikan diri berganda memastikan bahawa aksara khas dianggap sebagai sebahagian daripada ungkapan biasa dan bukan sebagai sebahagian daripada rentetan literal.

Atas ialah kandungan terperinci Mengapa Saya Perlu Melarikan Diri Rentetan Dua Kali Apabila Menggunakan RegExp Constructor?. 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