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
Linda Hamiltonasal
2024-12-26 03:04:13558semak imbas

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

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

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!

Kenyataan:
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