Buat ekspresi reguler terpendek yang kira-kira akan cocok dengan URL dalam teks saat dijalankan dalam JavaScript
Contoh:
"some text exampley.com".match(/your regular expression goes here/);
Ekspresi reguler perlu
- tangkap semua URL yang valid untuk http dan https.
- tidak khawatir tentang tidak cocok dengan string mencari URL yang sebenarnya bukan URL yang valid
super.awesome/cool
- valid ketika dijalankan sebagai regex JavaScript
Kriteria pengujian:
Pertandingan:
- http://example.com
- http://example.com/
- http://example.com/super
- https://example.com/super
- example.com/super
- example.com
- example.com/su-per_duper/?add=yes&subtract=no
- example.com/archive/index.html
- twitter.com/#!/reply
- example.com/234ret2398oent/234nth
- codegolf.stackexchange.com/questions/464
- crazy.wow.really.example.com/?cat=nth%3E
- contoh-contoh.com
- example1.com
Tidak cocok:
- contoh
- sangat keren
- Selamat pagi
- saya bisa
- Halo.
Berikut ini adalah tes yang mungkin membantu sedikit memperjelas http://jsfiddle.net/MikeGrace/gsJyr/
Saya minta maaf karena tidak jelasnya, saya tidak menyadari betapa buruknya URL yang cocok.
code-golf
javascript
regular-expression
Mike Grace
sumber
sumber
\w
untuk semuanya. Apakah Anda mengharapkan referensi untuk komponen URL yang berbeda?/:/
sebagai ekspresi reguler dan mencocokkan URI yang valid dan tidak cocok dengan semua contoh Anda pada daftar »Tidak cocok«. Selama Anda menempuh rute itu, itu hanyalah pertanyaan: Apa ekspresi reguler terpendek yang tidak akan cocok dengan string contoh mana pun tetapi masih menangkap semua URI.Jawaban:
tidak cocok dengan 3 string yang seharusnya tidak cocok dengan hampir semua string lainnya;)
upd: masih tidak cocok dengan semua 5 string
sumber
Yang ini berfungsi:
Lulus tes di http://jsfiddle.net/9BYdp/1/
Juga cocok:
sumber
http://user:[email protected]/path
Ini jelas tidak melakukan apa yang Anda inginkan, tetapi memenuhi kriteria Anda:
"cocok dengan semua URL yang valid yaitu untuk http dan https."
ya, pasti akan cocok.
"Jangan khawatir tentang tidak cocok dengan string yang mencari URL yang sebenarnya bukan URL yang valid seperti 'super.awesome / keren'"
ya, tentu, akan ada banyak positif palsu, tetapi Anda mengatakan itu tidak masalah.
valid ketika dijalankan sebagai regex JavaScript
Pastikan telur berfungsi seperti yang Anda katakan seharusnya.
Jika hasil ini BUKAN jawaban yang benar, maka Anda harus lebih selektif dengan kriteria Anda.
Untuk menjadi aturan yang berfungsi sesuai keinginan Anda, sebenarnya Anda lakukan sesuai keinginan perlu menerapkan pencocokan yang memenuhi standar RFC, dan pencocokan yang memenuhi standar RFC akan "khawatir tidak cocok".
Jadi, dalam hal "izin tidak cocok", Anda harus menentukan dengan tepat penyimpangan dari RFC yang diizinkan.
Apa pun yang lain, dan seluruh latihan ini adalah bohong, karena orang hanya akan menulis apa pun yang sesuai untuk mereka, atau bagaimana mereka menyukainya, dan mengorbankan "yang masuk akal" demi menjadi pendek (seperti yang saya lakukan).
Tentang pembaruan Anda
Regex paling naif yang bisa saya buat dengan korek api (dan menangkap) semua contoh yang Anda tempelkan sejauh ini adalah:
Sifatnya cukup sederhana, dan mengasumsikan hanya 3 bentuk dasar yang mungkin.
z
bisa anthing bukan spasi putih.x
bisa apa saja bukan spasi.y
bisa berupa apa saja yang bukan spasi putih atau karakter '/'.Ada banyak hal yang akan berlaku untuk aturan ini, banyak, tetapi mereka setidaknya akan terlihat seperti URI yang valid untuk manusia, mereka hanya tidak akan kompatibel dengan spesifikasi.
misalnya:
Saya pikir pendekatan waras adalah mengekstraksi hal-hal yang kemungkinan menjadi URI, kemudian memvalidasinya dengan sesuatu yang lebih ketat, saya sedang mencari cara bagaimana menggunakan browser kelas URI untuk memvalidasi mereka =).
Tetapi Anda dapat melihat alasan di atas bekerja pada sampel ini di sini: http://jsfiddle.net/mHbXx/
sumber
/:/
bahkan setelah diedit :-)Coba itu.
Saya termasuk garis miring yang mengarah dan mengekor yang membatasi ekspresi reguler, jadi mudah-mudahan itu tidak mengurangi jumlah karakter saya!
Pola ini membatasi protokol untuk http atau https, memungkinkan untuk nomor port opsional, dan kemudian memungkinkan karakter apa pun kecuali spasi.
sumber