Dalam JavaScript, apabila membina ungkapan biasa menggunakan pembina RegExp, adalah penting untuk menggandakan literal rentetan melarikan diri. Amalan ini mungkin kelihatan membingungkan pada mulanya, tetapi ia berpunca daripada tafsiran jujukan pelarian JavaScript dalam literal rentetan.
Apabila menghantar rentetan kepada pembina RegExp, ia mengalami literal rentetan menghurai. Semasa proses ini, aksara sengkang terbalik () berfungsi sebagai watak melarikan diri. Jika anda menggunakan satu dalam rentetan RegExp literal, ia akan digunakan oleh pengurai literal rentetan.
Sebagai contoh, pertimbangkan kod berikut:
const foo = "foo"; const singleEscapedString = '(\s|^)' + foo;
Dalam contoh ini, garis miring ke belakang sebelum s ditafsirkan sebagai watak melarikan diri dalam rentetan literal. Akibatnya, ia menghilangkan makna istimewa watak s. Walau bagaimanapun, dalam konteks ungkapan biasa, kami mahu s sepadan dengan aksara ruang putih, yang hilang disebabkan tafsiran jujukan melarikan diri.
Untuk mengelakkan salah tafsir ini, anda perlu menggandakan melarikan diri daripada garis miring ke belakang dalam rentetan literal. Ini secara berkesan memberitahu penghurai literal rentetan untuk merawat aksara seterusnya secara literal, mengekalkan makna khasnya untuk enjin ungkapan biasa.
const doubleEscapedString = '(\s|^)' + foo;
Dengan melarikan diri dua kali, kami memastikan bahawa garis miring ke belakang tidak digunakan oleh penghurai literal rentetan , membenarkan enjin ekspresi biasa mentafsirkannya dengan betul sebagai aksara melarikan diri.
Pertimbangkan rentetan pelarian tunggal berikut:
const singleEscapedString = '[\w\s]+'; console.log(singleEscapedString);
Di sini, garis serong ke belakang sebelum w ditafsirkan sebagai watak melarikan diri, mengalih keluar makna istimewa watak w. Akibatnya, rentetan akan sepadan dengan mana-mana aksara yang sama ada aksara perkataan atau aksara ruang putih. Walau bagaimanapun, ini bukan tingkah laku yang dimaksudkan.
Dengan melarikan diri dua kali dari garis serong ke belakang, kami memastikan bahawa watak w dianggap sebagai watak perkataan dalam ungkapan biasa:
const doubleEscapedString = '[\w\s]+'; console.log(doubleEscapedString);
Atas ialah kandungan terperinci Mengapakah Saya Perlu Menggandakan Melarikan Diri Segaris Belakang dalam Pembina RegExp JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!