Rumah > hujung hadapan web > tutorial js > Mengapa Saya Perlu Melarikan Diri Berganda dalam Pembina RegExp JavaScript?

Mengapa Saya Perlu Melarikan Diri Berganda dalam Pembina RegExp JavaScript?

Barbara Streisand
Lepaskan: 2024-12-26 05:49:31
asal
389 orang telah melayarinya

Why Do I Need Double Escaping in JavaScript RegExp Constructors?

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:

  • Escape rentetan: Dalam literal rentetan, garis miring ke belakang berfungsi sebagai aksara melarikan diri, menandakan bahawa aksara berikut mempunyai makna istimewa.
  • Melarikan diri regex: Dalam corak regex, garis miring ke belakang memperkenalkan urutan pelarian khas yang mengubah suai gelagat corak padanan.

Pertimbangkan contoh ini:

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

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

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