Haha, mari kita mulai dengan beberapa kata. Tahun lalu saya menggunakan C# untuk membuat alat penyorot sintaks. Ini memformat kode yang diberikan ke dalam HTML berdasarkan informasi di file konfigurasi, sehingga dapat menampilkan sintaks yang sama di halaman web. di editor. Efek penyorotan elemen dan dukungan untuk pelipatan kode. Betul, mirip dengan yang Anda lihat di blog. Karena saya menggunakan MSN Space pada saat itu, fungsi ini tidak disediakan, jadi saya harus menulisnya sendiri.
Saya menggunakan C# untuk menulis. Awalnya, saya menggunakan pernyataan dasar yang sangat rumit seperti for, while, switch, if, dll. untuk menilai kata kunci, dll. Jangan menertawakan saya. Saya bodoh dan tidak tahu apa ekspresi reguler pada saat itu, jadi saya hanya dapat menggunakan metode kasar ini. Tentu saja, metode kasar masih efektif. Ini hanya kode yang panjang dalam suatu fungsi. Akan sangat sulit untuk mempertahankannya di masa mendatang perangkat lunak lain tidak dapat ditulis seperti ini, jadi... Setelah mencari di Google beberapa saat, saya menemukan beberapa kode dan proyek sumber terbuka dengan penyorotan sintaksis, dan mulai melihatnya. . . . . Wah rumit banget semuanya. Jujur saja, hal yang paling saya tidak suka lakukan adalah melihat kode orang lain. Saya tidak sok, tapi sangat membingungkan untuk melihat kode orang lain deskripsi dokumen yang sangat rinci, jika tidak, saya tidak ingin melihatnya pada pandangan pertama. Paling-paling, saya hanya melihat bagaimana orang lain menulis antarmuka, dan kemudian menebak bagaimana implementasinya secara internal.
Meskipun pencariannya tidak terlalu membantu, tetap saja saya tahu tentang ekspresi reguler. Saat itu, saya mulai mempelajari ekspresi reguler sambil memperbaiki "barang rusak" saya. Tidak lama setelah itu, saya mulai ngeblog lagi di Blog Park, dan akhirnya mengaktifkan fungsi penyorotan sintaksis Blog Park. Jadi saya kehilangan motivasi besar untuk menulis kode saya sendiri untuk menyorot HTML. Kedua, modul penyorotan sintaksis yang dibuat dalam C# hanya dapat berjalan di sisi server atau program WinForm, dan yang pada akhirnya ingin saya peroleh adalah kode HTML untuk ditampilkan di halaman. Menurut saya skrip sisi klien paling cocok untuk pekerjaan ini. Sayangnya saya tidak tahu banyak tentang JS. . . Kemudian, saya mulai mengotak-atik hal-hal lain selama periode ini, dan tidak meningkatkan modul penyorotan sintaksis.
Saya bekerja lembur tadi malam dan pulang ke rumah. Awalnya saya berencana untuk terus belajar UML dan melihat polanya. Kemudian saya ingat bahwa perusahaan memiliki modul yang perlu menghapus semua tag HTML pada hasil yang dikembalikan oleh database, jadi saya membuka yang biasa. alat ekspresi RegexBuddy. Hasilnya, saya melihat tutorial sederhana tentang penggunaan ekspresi reguler di JScript di dokumen bantuan RegexBuddy, sehingga rasa ingin tahu saya muncul lagi, jadi saya membuka UltraEdit-32 dan mulai menulis JavaScript sederhana untuk bereksperimen.
Saya tidak akan membahas detail proses pengujian saya di sini, karena banyak tempat yang melibatkan pengujian berulang dan banyak jalan memutar. Di sini saya akan langsung memberikan penggunaan ekspresi reguler di JScript yang saya rangkum dari pengujian tersebut.
Cukup dengan omong kosongnya, mari langsung ke intinya!
Perdana Menteri berbicara tentang objek ekspresi reguler JScript, RegExp.
Nama kelas yang menyediakan operasi ekspresi reguler di JScript adalah RegExp, dan objek bertipe RegExp dapat dibuat instance-nya dengan dua cara.
Metode 1, contoh konstruktor:
var myRegex = new RegExp(" \w +", "igm");
//w+ adalah ekspresi reguler sebenarnya. Perhatikan bahwa pertama adalah untuk pelolosan. igm berarti mengabaikan huruf besar-kecil, pencarian global, dan pencarian multi-baris. Ini akan dijelaskan nanti.
Metode kedua, metode penugasan langsung:
var myRegex = /w+/igm;
//Efeknya sama dengan pernyataan sebelumnya, hanya saja tidak perlu menggunakan karakter transfer di sini. Ekspresi reguler aslinya adalah seperti apa efeknya sama dengan igm pada contoh sebelumnya.
Metode spesifik yang digunakan bergantung pada preferensi setiap orang. Secara pribadi, menurut saya metode kedua lebih mudah dibaca saat menulis regex. Dokumen bantuan RegexBuddy juga merekomendasikan metode kedua. Objek RegExp mencakup operasi berikut:
exec(string str): melakukan pencocokan ekspresi reguler dan mengembalikan hasil pencocokan. Menurut contoh hasil berjalan yang diberikan oleh MSDN, setiap eksekusi exec dimulai dari akhir pencocokan langsung terakhir nilai yang dikembalikan tampaknya merupakan objek RerExp, dan penjelasan yang diberikan oleh RegexBuddy adalah mengembalikan array, tetapi tidak ada contoh detail yang diberikan, menurut saya, ini lebih dapat diandalkan berdasarkan hasil eksperimen.
kompilasi (string regex, string flags): Pra-kompilasi ekspresi reguler untuk membuatnya berjalan lebih cepat. Setelah pengujian, efisiensi meningkat secara signifikan setelah pra-kompilasi. Parameter regex adalah ekspresi reguler, dan flag dapat berupa kombinasi dari tiga nilai berikut: g – pencarian global. Hasil pengujian saya adalah tanpa menambahkan flag g, ia hanya dapat mencocokkan string pertama yang memenuhi syarat i – mengabaikan huruf besar/kecil m – Pencarian multi-baris tampaknya merupakan pencarian multi-baris secara default
test(string str): jika str cocok dengan ekspresi reguler, ia mengembalikan nilai true, jika tidak maka mengembalikan false. Metode pencocokan ini mirip dengan objek string Objek
RegExp berisi atribut berikut :
indeks: dalam string Posisi ekspresi pencocokan pertama, awalnya -1
input: target yang cocok dari ekspresi reguler, perhatikan bahwa ini hanya-baca
lastIndex: Posisi ekspresi pencocokan berikutnya. Kata aslinya adalah (Mengembalikan posisi karakter di mana kecocokan berikutnya dimulai dalam string yang dicari.) Saya tidak tahu apakah ada kesalahan terjemahan.
lastMatch: string terakhir yang cocok dengan ekspresi
lastParen: string sub-pencocokan terakhir yang cocok. Misalnya, jika ada beberapa kecocokan yang dikelompokkan berdasarkan () dalam ekspresi reguler, lastParen mewakili grup terakhir dari hasil yang cocok.
leftContext: Semua karakter dari awal string target hingga posisi awal pertandingan terakhir.
rightContext: Semua karakter dari akhir kecocokan terakhir hingga akhir seluruh string target.
$1...$9: Menunjukkan hasil kecocokan grup ke-n. Ini berguna ketika ada beberapa grup () dalam ekspresi reguler.
Selanjutnya, mari kita bicara tentang operasi yang terkait dengan objek String dan ekspresi reguler di JScript:
cocok (string regex): Menerima ekspresi reguler dan mengembalikan apakah string cocok dengan ekspresi.
replace(srting regex, string str): Ganti substring yang cocok dengan ekspresi reguler dengan str. Fungsi ini tampak sederhana, tetapi juga menyembunyikan penggunaan lebih lanjut. Silakan lihat contoh berikut.
Contoh 1:
var str1 = "A:Nama saya Peter!nB:Hai Peter!";
str1 = str1.replace(/Peter/g,"Jack");
peringatan(str1);
Contoh ini sesederhana mengganti string. Kekuatan ekspresi ini tentu saja tidak terbatas pada hal ini. Jika Anda ahli dalam menggunakannya, Anda juga dapat menggunakannya untuk menyelesaikan banyak tugas yang sebelumnya membutuhkan banyak kode. Misalnya, tambahkan tag HTML yang disorot sebelum dan sesudah kata kunci kode. Dari contoh sebelumnya sepertinya replace hanya bisa mengganti teks yang cocok dengan teks baru. Bagaimana cara menggunakannya untuk menyisipkan tag sebelum dan sesudah kata kunci? Kalau dipikir-pikir lagi, jika bisa menggunakan hasil pencocokan saat mengganti, maka segalanya akan lebih mudah. Ganti saja kata kuncinya dengan: tag header + kata kunci + tag tail.
Tapi bagaimana cara menggunakan hasil pencocokan ekspresi reguler sebagai pengganti?
Saat ini kita perlu menggunakan “variabel pencocokan”. Variabel pencocokan digunakan untuk merepresentasikan hasil pencocokan reguler.
$& -- mewakili hasil pencocokan dari semua grup yang cocok. Terakhir, grup yang cocok adalah grup () dari ekspresi reguler.
$$ -- mewakili karakter $. Karena variabel yang cocok menggunakan karakter $, maka variabel tersebut perlu di-escape.
$n -- mirip dengan $1...$9 sebelumnya, menunjukkan kumpulan hasil pencocokan ke-n
$nn -- hasil sederhana dari pertandingan grup ke-nn
$` -- adalah LeftContext yang disebutkan sebelumnya. Misalnya, jika abcdefg cocok dengan d, maka abc adalah LeftContext-nya.
$' -- Hampir mirip dengan diatas, jangan salah baca! , ini adalah rightContext. Dengan analogi, efg adalah rightContext dari contoh di atas. Jadi sekarang sangat mudah bagi kita untuk menyisipkan tag sebelum dan sesudah kata kunci:
var str1 = "A:My name is Peter!nB:Hi Petrus!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
peringatan(str1);
Sekarang sudah pukul 00:39. . . Mari kita berhenti di sini.
Unduhan perangkat lunak alat biasa (kata sandi: regex): regex buddy 2.06.zip
Silakan lihat contoh yang saya tulis: Penyorotan sintaksis JScript (perampingan kode)
Berikut beberapa contoh dari MSDN:
fungsi matchDemo()
{
vars;
var re = RegExp baru("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 berisi: " + RegExp.$1 + "n";
s += "$2 berisi: " + RegExp.$2 + "n";
s += "$3 berisi: " + RegExp.$3;
pengembalian;
}
fungsi RegExpTest()
{
var ver = Angka(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
jika (ver >= 5.5){
var src = "Hujan di Spanyol sebagian besar turun di dataran.";
var re = /w+/g;
var arr;
while ((arr = re.exec(src)) != null)
print(arr.index + "-" + arr.lastIndex + "t" + arr);
}
kalau tidak{
alert("Anda memerlukan versi JScript yang lebih baru agar ini dapat berfungsi");
}
}
fungsi pertandinganDemo()
{
var s; //Deklarasikan variabel.
var re = new RegExp("d(b+)(d)","ig"); //Pola ekspresi reguler.
var str = "cdbBdbsbdbdz"; //String yang akan dicari.
var arr = re.exec(str); //Lakukan pencarian.
s = "$1 pengembalian: " + RegExp.$1 + "n";
s += "$2 kembali: " + RegExp.$2 + "n";
s += "$3 kembali: " + RegExp.$3 + "n";
s += "masukan kembali : " + RegExp.input + "n";
s += "lastMatch kembali: " + RegExp.lastMatch + "n";
s += "leftContext kembali: " + RegExp.leftContext + "n";
s += "rightContext kembali: " + RegExp.rightContext + "n";
s += "lastParen kembali: " + RegExp.lastParen + "n";
return(s); //Mengembalikan hasil.
}
dokumen.write(matchDemo());
Jika ada hero yang lewat yang mempunyai pendapat tentang artikel ini, silakan posting di sini. Mari kita belajar dan membuat kemajuan bersama.