Adakah yang punya saran untuk mendeteksi URL dalam serangkaian string?
arrayOfStrings.forEach(function(string){
// detect URLs in strings and do something swell,
// like creating elements with links.
});
Pembaruan: Saya akhirnya menggunakan regex ini untuk deteksi tautan ... Rupanya beberapa tahun kemudian.
kLINK_DETECTION_REGEX = /(([a-z]+:\/\/)?(([a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(\s+|$)/gi
Pembantu penuh (dengan dukungan Setang opsional) ada di inti # 1654670 .
javascript
regex
url
arbales
sumber
sumber
Jawaban:
Pertama, Anda membutuhkan regex yang cocok dengan url. Ini sulit dilakukan. Lihat di sini , di sini dan di sini :
Lagi pula, jawaban ini tidak dimaksudkan untuk memberi Anda regex terbaik tetapi lebih sebagai bukti bagaimana melakukan pembungkus string di dalam teks, dengan JavaScript.
OK jadi mari kita gunakan yang satu ini:
/(https?:\/\/[^\s]+)/g
Sekali lagi, ini adalah regex yang buruk . Ini akan memiliki banyak kesalahan positif. Namun itu cukup baik untuk contoh ini.
Singkatnya, cobalah:
sumber
.replace
: |text="Find me at http://www.example.com, and also at http://stackoverflow.com."
dalam dua 404-an. Beberapa pengguna mengetahui hal ini dan akan menambahkan spasi setelah URL sebelum tanda baca untuk menghindari kerusakan, tetapi sebagian besar pengenal tautan yang saya gunakan (Gmail, etherpad, phabricator) memisahkan tanda baca jejak dari URL.Inilah yang akhirnya saya gunakan sebagai regex saya:
Ini tidak termasuk tanda baca di URL. Fungsi Crescent bekerja seperti pesona :) jadi:
sumber
urlRegex
harus didefinisikan di luarlinkify
sebagai kompilasi itu mahal.()
di setiap daftar karakter dan berfungsi sekarang.Saya mencari-cari masalah ini untuk beberapa saat, kemudian terpikir oleh saya bahwa ada metode Android, android.text.util.Linkify, yang menggunakan beberapa regex yang cukup kuat untuk mencapai hal ini. Untungnya, Android adalah open source.
Mereka menggunakan beberapa pola berbeda untuk mencocokkan berbagai jenis url. Anda dapat menemukannya di sini: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/text/util/Regex.java#Regex. 0WEB_URL_PATTERN
Jika Anda hanya khawatir tentang url yang cocok dengan WEB_URL_PATTERN, yaitu, url yang sesuai dengan spesifikasi RFC 1738, Anda dapat menggunakan ini:
Berikut ini teks lengkap sumbernya:
Jika Anda ingin benar-benar mewah, Anda dapat menguji alamat email juga. Regex untuk alamat email adalah:
PS: Domain tingkat atas yang didukung oleh regex di atas adalah terbaru pada Juni 2007. Untuk daftar yang terbaru Anda perlu memeriksa https://data.iana.org/TLD/tlds-alpha-by-domain.txt .
sumber
a-zA-Z
danhttp|https|Http|Https|rtsp|Rtsp
.Berdasarkan jawaban Crescent Fresh
jika Anda ingin mendeteksi tautan dengan http: // ATAU tanpa http: // dan oleh www. Anda dapat menggunakan yang berikut ini
sumber
Pustaka ini di NPM sepertinya cukup komprehensif https://www.npmjs.com/package/linkifyjs
sumber
Fungsi dapat lebih ditingkatkan untuk membuat gambar juga:
atau untuk gambar mini yang menghubungkan ke gambar ukuran penuh:
Dan di sini adalah fungsi strip () yang pra-proses string teks untuk keseragaman dengan menghapus html yang ada.
sumber
Kode Pendek Kerja Besar! ...
Hasil:-
sumber
Ada paket npm yang ada: url-regex , cukup instal dengan
yarn add url-regex
ataunpm install url-regex
dan gunakan sebagai berikut:sumber
tmp.innerText tidak ditentukan. Anda harus menggunakan tmp.innerHTML
sumber
coba ini:
juga akan mengenali url seperti
google.com
,http://www.google.bla
,http://google.bla
,www.google.bla
tapi tidakgoogle.bla
sumber
Anda dapat menggunakan regex seperti ini untuk mengekstrak pola url normal.
Jika Anda membutuhkan pola yang lebih canggih, gunakan perpustakaan seperti ini.
https://www.npmjs.com/package/pattern-dreamer
sumber
(?:www\.|(?!www))
? Mengapawwwww.com
tidak valid?Solusi Berorientasi Objek Umum
Untuk orang-orang seperti saya yang menggunakan kerangka kerja seperti sudut yang tidak memungkinkan memanipulasi DOM secara langsung, saya membuat fungsi yang mengambil string dan mengembalikan array
url
/plainText
objek yang dapat digunakan untuk membuat representasi UI yang Anda inginkan.Regex URL
Untuk pencocokan URL saya menggunakan
h0mayun
regex (sedikit disesuaikan) :/(?:(?:https?:\/\/)|(?:www\.))[^\s]+/g
Fungsi saya juga menjatuhkan karakter tanda baca dari akhir URL seperti
.
dan,
yang saya percaya lebih sering akan menjadi tanda baca yang sebenarnya daripada akhiran URL yang sah (tetapi bisa saja! Ini bukan ilmu yang keras seperti yang dijelaskan oleh jawaban lain dengan baik) Untuk itu saya menerapkan mengikuti regex ke URL yang cocok/^(.+?)([.,?!'"]*)$/
.Kode skrip
sumber
Jika Anda ingin mendeteksi tautan dengan http: // ATAU tanpa http: // ATAU ftp ATAU kasus lain yang mungkin seperti menghapus tanda baca tertinggal di bagian akhir, lihat kode ini.
https://jsfiddle.net/AndrewKang/xtfjn8g3/
Cara sederhana untuk menggunakannya adalah menggunakan NPM
sumber