Pilih Izinkan karakter '|' untuk memilih di antara dua atau lebih kandidat. Dengan memperluas ekspresi reguler dari judul bab, dapat diperluas menjadi ekspresi yang berlaku lebih dari sekadar judul bab. Namun, ini tidak sekecil yang diharapkan. Saat menggunakan seleksi, ekspresi yang paling mungkin untuk setiap sisi karakter '|' akan dicocokkan. Anda mungkin berpikir bahwa ekspresi JScript dan VBScript berikut akan cocok dengan 'bab' atau 'bagian' di posisi awal dan akhir dari suatu baris dan diikuti oleh satu atau dua angka:
/^Chapter|Section [1-9][0-9]{0,1}$/ ^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;Sayangnya, kasus sebenarnya adalah bahwa ekspresi reguler yang ditunjukkan di atas cocok dengan kata 'bab' di awal garis atau cocok dengan 'bagian' di akhir baris diikuti oleh angka apa pun. Jika string input adalah 'Bab 22', ekspresi di atas hanya akan cocok dengan kata 'bab'. Jika string input adalah 'Bagian 22', ekspresi akan cocok dengan 'Bagian 22'. Tetapi hasil ini bukan tujuan kami di sini, jadi harus ada cara untuk membuat ekspresi reguler lebih responsif terhadap apa yang akan mereka lakukan, dan memang ada cara seperti itu.
Tanda kurung dapat digunakan untuk membatasi rentang pilihan, yaitu, jelas bahwa pilihan hanya berlaku untuk dua kata 'bab' dan 'bagian'. Namun, tanda kurung juga sulit untuk ditangani karena mereka juga digunakan untuk membuat sub -ekspresi, dan beberapa akan diperkenalkan nanti di bagian sub -ekspresi. Dengan mengambil ekspresi reguler yang ditunjukkan di atas dan menambahkan tanda kurung di lokasi yang sesuai, ekspresi reguler dapat dibuat untuk mencocokkan 'Bab 1' dan 'Bagian 3'.
Ekspresi reguler berikut menggunakan tanda kurung untuk mengelompokkan 'bab' dan 'bagian' sehingga ekspresi bekerja dengan benar. Untuk jscript:
/^(Chapter|Section) [1-9][0-9]{0,1}$/Untuk vbscript:
^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;Ekspresi ini bekerja dengan benar dan hanya menghasilkan produk sampingan yang menarik. Menempatkan tanda kurung di kedua sisi 'Bab | Bagian' menciptakan pengelompokan yang sesuai, tetapi juga menyebabkan salah satu dari dua kata dicocokkan ditangkap untuk digunakan di masa depan. Karena hanya ada satu set tanda kurung dalam ekspresi yang ditunjukkan di atas, hanya ada satu pengiriman yang ditangkap. Pengiriman ini dapat direferensikan menggunakan koleksi pengiriman VBScript atau atribut $ 1- $ 9 dari objek RegExp di JScript.
Terkadang menangkap sub-kecocokan diinginkan, terkadang tidak diinginkan. Dalam contoh yang ditunjukkan dalam deskripsi, yang benar -benar ingin Anda lakukan adalah menggunakan tanda kurung untuk mengelompokkan pilihan antara kata 'bab' atau 'bagian'. Tidak diinginkan untuk merujuk pada pertandingan nanti. Bahkan, tolong jangan gunakan kecuali Anda benar-benar perlu menangkap sub-pertandingan. Ekspresi reguler ini akan lebih efisien karena tidak memerlukan waktu dan memori untuk menyimpan sub-kecocokan tersebut.
Anda dapat menggunakan '?:' Di depan tanda kurung pola ekspresi reguler untuk mencegah menyimpan kecocokan ini untuk penggunaan di masa depan. Modifikasi berikut untuk ekspresi reguler yang ditunjukkan di atas memberikan fungsionalitas yang sama yang menghilangkan penyimpanan pengiriman. Untuk jscript:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/Untuk vbscript:
^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;Selain Metacharacter '? Pra-cek maju diwakili oleh? =, Di mana pola ekspresi reguler dalam tanda kurung mulai cocok dengan string pencarian. Pra-cek negatif ditunjukkan oleh '?!' Untuk mencocokkan string pencarian pada posisi apa pun yang tidak cocok dengan pola ekspresi reguler di awal.
Misalnya, misalkan ada dokumen yang berisi referensi ke Windows 3.1, Windows 95, Windows 98, dan Windows NT. Lebih lanjut dengan asumsi bahwa dokumen perlu diperbarui dengan mencari semua referensi ke Windows 95, Windows 98, dan Windows NT dan mengubah referensi ini ke Windows 2000. Anda dapat menggunakan ekspresi reguler JScript berikut, yang merupakan pre-check maju untuk mencocokkan Windows 95, Windows 98, dan Windows NT:
/Windows(?=95 |98 |NT )/ Untuk membuat kecocokan yang sama di VBScript, Anda dapat menggunakan ekspresi berikut: Windows(?=95 |98 |NT )
Setelah pertandingan ditemukan, pencarian pertandingan berikutnya dimulai segera setelah teks yang cocok (tidak termasuk karakter yang digunakan dalam pra-pemeriksaan). Misalnya, jika ekspresi yang ditunjukkan di atas cocok dengan 'Windows 98', pencarian akan berlanjut dari 'Windows' alih -alih '98'.
Salah satu fitur terpenting dari ekspresi reguler adalah kemampuan untuk menyimpan bagian dari pola sukses yang cocok untuk digunakan nanti. Ingatlah bahwa menambahkan tanda kurung ke kedua sisi pola ekspresi reguler atau pola parsial akan menyebabkan ekspresi parsial disimpan dalam buffer sementara. Metacharacters yang tidak menangkap '?:', '? =', Atau '?!' Dapat digunakan untuk mengabaikan penyimpanan bagian ekspresi reguler ini.
Setiap pengiriman yang ditangkap disimpan sebagai konten yang ditemui dari kiri ke kanan dalam pola ekspresi reguler. Nomor buffer yang menyimpan sub-kecocokan dimulai pada 1 dan diberi nomor secara berurutan hingga maksimum 99 sub-ekspresi. Setiap buffer dapat diakses menggunakan '/ n ', di mana n adalah nomor desimal satu atau dua digit yang mengidentifikasi buffer tertentu.
Kutipan Mundur Salah satu aplikasi termudah dan paling berguna adalah kemampuan untuk menentukan di mana dua kata yang identik muncul dalam teks secara berurutan. Silakan lihat kalimat berikut:
Is is the cost of of gasoline going up up?Menurut konten tertulis, kalimat di atas jelas memiliki masalah kata -kata berulang berulang kali. Akan lebih baik jika ada cara untuk memodifikasi kalimat tanpa mencari pengulangan setiap kata. Ekspresi reguler JScript berikut dapat mencapai fungsi ini menggunakan subekspresi.
//b([az]+) /1/b/giEkspresi VBScript yang setara adalah:
/b([az]+) /1/bDalam contoh ini, subekspresi adalah setiap item antara tanda kurung. Ekspresi yang ditangkap mencakup satu atau lebih karakter abjad, yaitu ditentukan oleh '[az]+'. Bagian kedua dari ekspresi reguler adalah referensi ke sub-match yang ditangkap sebelumnya, yaitu, kemunculan kata kedua yang cocok dengan ekspresi tambahan. '/1' digunakan untuk menentukan pengiriman pertama. Karakter elemen batas kata memastikan bahwa hanya kata -kata individu yang terdeteksi. Jika tidak, frasa seperti yang dikeluarkan atau ini akan diakui secara tidak benar oleh ekspresi.
Dalam ekspresi JScript, flag global ('G') mengikuti ekspresi reguler berarti bahwa ekspresi akan digunakan untuk menemukan sebanyak mungkin kecocokan dalam string input. Sensitivitas kasus ditentukan oleh tanda sensitivitas kasus ('i') di akhir ekspresi. Tag multi-line menentukan potensi kecocokan yang mungkin muncul di kedua ujung karakter baru. Untuk VBScript, berbagai tag tidak dapat diatur dalam ekspresi, tetapi mereka harus secara eksplisit diatur menggunakan properti objek RegExp .
Menggunakan ekspresi reguler yang ditunjukkan di atas, kode JScript berikut dapat menggantikan kata yang sama yang muncul dua kali dalam string literal dengan kata yang sama menggunakan informasi sub-pertandingan:
. var rv = ss.replace(re,$1); //var ss = Is is the cost of of gasoline going up up?./n; var re = //b([az]+) /1/b/gim; //. var rv = ss.replace(re,$1); //Ganti dua kata dengan satu kata.
Kode VBScript setara terdekat adalah sebagai berikut:
Dim ss, re, rv ss = Is is the cost of of gasoline going up up?. & vbNewLine Set re = New RegExp re.Pattern = /b([az]+) /1/b re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,$1)Perhatikan bahwa dalam kode VBScript, global, sensitivitas kasus, dan tag multi-line diatur menggunakan properti yang sesuai dari objek RegExp .
Gunakan $ 1 dalam metode ganti untuk merujuk pengiriman pertama yang disimpan. Jika ada beberapa sub-kecocokan, Anda dapat terus merujuk dengan $ 2 , $ 3, dll.
Penggunaan referensi mundur lainnya adalah memecahkan indikator sumber daya umum (URI) menjadi bagian -bagian komponen. Misalkan Anda ingin menguraikan URI berikut menjadi protokol (FTP, HTTP, dll), alamat nama domain, dan halaman/jalur:
http://msdn.microsoft.com:80/scripting/default.htmEkspresi reguler berikut dapat memberikan fungsi ini. Untuk jscript, sebagai:
/(/w+):////([^/:]+)(:/d*)?([^# ]*)/Untuk vbscript:
(/w+):////([^/:]+)(:/d*)?([^# ]*)Subekspresi tambahan pertama digunakan untuk menangkap bagian protokol alamat web. Subekspresi ini cocok dengan kata apa pun yang terletak di depan usus besar dan dua tebasan ke depan. Subekspresi tambahan kedua menangkap alamat nama domain dari alamat itu. Subekspresi ini cocok dengan urutan karakter apa pun yang tidak termasuk karakter '^', '/' atau ':'. Subekspresi tambahan ketiga menangkap nomor port situs web jika nomor port ditentukan. Subekspresi ini cocok dengan nol atau lebih angka diikuti oleh usus besar. Akhirnya, Subekspresi Tambahan Keempat menangkap jalur yang ditentukan oleh alamat web dan/atau informasi halaman. Subekspresi ini cocok dengan satu dan beberapa karakter kecuali '#' atau ruang.
Setelah menerapkan ekspresi reguler ini ke URI yang ditunjukkan di atas, sub-pertandingan berisi yang berikut:
Regexp. $ 1 berisi http
Regexp. $ 2 berisi msdn.microsoft.com
Regexp. $ 3 termasuk: 80
Regexp. $ 4 berisi /scripting/default.htm