SORU
30 EYLÜL 2009, ÇARŞAMBA


JavaScript ile metin içinde URL tespit

Herkes dizeleri bir dizi tespit Urller için bir öneriniz var mı?

arrayOfStrings.forEach(function(string){
  // detect URLs in strings and do something swell,
  // like creating elements with links.
});

Güncelleme:Algılama bağlantı için bu düzenli ifade kullanarak... görünen o ki birkaç yıl sonra buldum.

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

Tam Yardımcısı (isteğe bağlı Gidon desteği ile) gist #1654670.

CEVAP
30 EYLÜL 2009, ÇARŞAMBA


İlk URL ile eşleşen bir düzenli ifade iyi gerekir. Bunu yapmak çok zor. here, here here bkz

...hemen hemen her şey için geçerli bir URL. Orada bazı noktalama kuralları şunlardır o kadar bölme. Herhangi bir yok hala geçerli bir noktalama URL.

RFC dikkatli bir şekilde kontrol edin ve bakın bakalım bir "" URL. geçersiz inşa edebilirsiniz Bu kuralları çok esnektir.

Örneğin ::::: geçerli bir URL değil. Yolu ":::::". Bir güzel aptal filename, ama geçerli bir dosya adı.

Ayrıca, ///// geçerli bir URL değil. Bu ("") hostname "". netloc Yol "///". Yine, aptal. Ayrıca geçerli. Bu URL "///"normalleştirir eşdeğerdir.

*12 gibi bir şey* tamamen geçerli. Aptalca ama geçerli.

Her neyse, bu cevabı en iyi düzenli ama dize JavaScript ile metin içinde kaydırma yapmak için nasıl bir kanıt değil vermek içindir.

Bu bir kullanım sağlar sadece bu kadar TAMAM: /(https?:\/\/[^\s] )/g

Yinebu kötü bir düzenli ifade. Birçok yanlış pozitif olacaktır. Ancak bu örneğin yeterli.

function urlify(text) {
    var urlRegex = /(https?:\/\/[^\s] )/g;
    return text.replace(urlRegex, function(url) {
        return '<a href="'   url   '">'   url   '</a>';
    })
    // or alternatively
    // return text.replace(urlRegex, '<a href="$1">$1</a>')
}

var text = "Find me at http://www.example.com and also at http://stackoverflow.com";
var html = urlify(text);

// html now looks like:
// "Find me at <a href="http://www.example.com">http://www.example.com</a> and also at <a href="http://stackoverflow.com">http://stackoverflow.com</a>"

Özetle deneyin:

$$('#pad dl dd').each(function(element) {
    element.innerHTML = urlify(element.innerHTML);
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • Metheud

    Metheud

    9 EYLÜL 2006
  • RocketJump

    RocketJump

    22 ŞUBAT 2006