Giữ cho nó đơn giản! Nói những gì bạn không thể có, hơn là những gì bạn có thể có :)
Như đã đề cập ở trên, các URL có thể khá phức tạp, đặc biệt là sau '?' Và không phải tất cả chúng đều bắt đầu bằng 'www.' ví dụmaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Vì vậy, thay vì có một regex phức tạp sẽ không đáp ứng tất cả các trường hợp cạnh, và sẽ khó duy trì, làm thế nào về cái đơn giản hơn nhiều này, hoạt động tốt cho tôi trong thực tế.
Trận đấu
http(s):// (anything but a space)+
www. (anything but a space)+
Trong đó 'bất cứ thứ gì' [^'"<>\s]
... về cơ bản là một trận đấu tham lam, mang đến cho bạn một không gian, trích dẫn, khung góc hoặc cuối dòng
Cũng thế:
Hãy nhớ kiểm tra xem nó chưa ở định dạng URL, ví dụ: văn bản chứa href="..."
hoặcsrc="..."
Thêm ref = nofollow (nếu thích hợp)
Giải pháp này không "tốt" như các thư viện đã đề cập ở trên, nhưng đơn giản hơn nhiều và hoạt động tốt trong thực tế.
if html.match( /(href)|(src)/i )) {
return html; // text already has a hyper link in it
}
html = html.replace(
/\b(https?:\/\/[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='$1'>$1</a>"
);
html = html.replace(
/\s(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
html = html.replace(
/^(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
return html;
URL regexp from Component
không bình luận, một số giải thích về những gì nó đang làm sẽ hữu ích.Autolinker.js
được nhận xét rất tốt và có bài kiểm tra. Cácurlize.js
thư viện liên kết đến trong câu trả lời Vebjorn Ljosa của cũng trông featureful và duy trì tốt, mặc dù nó không có bài kiểm tra.