Keperluan Double Escape dalam RegExp Constructors: Penyelaman Lebih Dalam
Ekspresi biasa (regex) memainkan peranan penting dalam padanan corak dan manipulasi teks tugasan. Apabila membina regex, adalah penting untuk mempertimbangkan keanehan rentetan pelarian dua kali yang dihantar kepada pembina RegExp.
Pelepasan Berganda: Keperluan
Untuk memahami keperluan ini, adalah penting untuk mengenali peranan dwi aksara sengkang terbalik () dalam JavaScript:
Pertimbangkan contoh ini:
var res = new RegExp('(\s|^)' + foo).test(moo);
Pada mulanya, anda mungkin menganggap bahawa garis serong ke belakang sebelum s menunjukkan bahawa ia harus dianggap sebagai watak istimewa. Walau bagaimanapun, JavaScript mentafsirkan garis miring ke belakang sebagai aksara melarikan diri dalam rentetan literal, bukan sebagai urutan melarikan diri regex. Akibatnya, s ditafsirkan sebagai aksara biasa, menjadikan regex pada asasnya tidak berguna.
Untuk mengelakkan salah tafsir ini, rentetan yang dihantar kepada pembina RegExp mesti dilarikan dua kali, di mana setiap garis miring mewakili rakan sejawatannya yang sebenar. Tindakan ini memastikan bahawa pelarian mentakrifkan urutan pelarian regex dengan betul dan bukannya digunakan oleh penghuraian literal rentetan.
Identiti Tersilap: Contoh Praktikal
Satu pelarian boleh disalahtafsirkan sebagai sesuatu yang lain dalam rentetan literal. Sebagai contoh:
const foo = "foo"; const string = '(\s|^)' + foo; console.log(string); // Outputs: \(s|^)foo
Tanpa melarikan diri dua kali, garis miring ke belakang dianggap sebagai pelarian rentetan sebelum s. Akibatnya, s dicetak sebagai aksara literal dalam rentetan yang terhasil, membatalkan corak regex yang dimaksudkan. Melarikan diri dua kali akan menghalang salah tafsir ini:
const string = '(\s|^)\' + foo; console.log(string); // Outputs: (\s|^)\foo
Atas ialah kandungan terperinci Mengapa Saya Perlu Melarikan Diri Berganda dalam Pembina RegExp JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!