Utanmaz fiş: Sen (regular expression replace a word by a link) ilham için buradan bakabilirsiniz.
Soru zaten bir bağlantı olmadığı sürece, belli bir link ile bazı sözcüğü değiştirmek istedi. Yani var sorun daha az ya da aynı şeydir.
Tüm ihtiyacınız (sözcüğü yerine) bir URL ile eşleşen bir regex olduğunu. Bir URL (isteğe bağlı) "http://"
, "ftp://"
veya "mailto:"
ile başlar ve sürece hiçbir boşluk karakterleri olduğu gibi sürer: basit varsayım bu gibi olurdu , satır sonları, etiket parantez veya tırnak).
Önde, uzun regex sakının. Vaka-insensitively uygulayın.
(href\s*=\s*['"]?)?((?:http://|ftp://|mailto:)?[^.,<>"'\s\r\n\t]+(?:\.(?![.<>"'\s\r\n])[^.,!<>"'\s\r\n\t]+)+)
Uyardı - Bu da technically geçersiz URL'ler maç olacak, ve bir URL olarak things.formatted.like.this tanıyacaktır. Çok duyarsız ise sizin verilere bağlıdır. Eğer yanlış pozitif döndürür örnekler varsa ben regex ince ayar yapabilirsiniz.
Regex iki maç grup üretecek. Grup 2, URL büyük olasılıkla eşleşti şeyi içerecektir. Grup 1 boş bir dize veya 'href="'
içerecektir ya. Bu maç Varolan bir bağlantının inside a href parametresini meydana geldiğini bir göstergesi olarak kullanabilirsiniz ve bu dokunuş yapmak zorunda değilsiniz biridir.
Bu most of the time (kullanıcı tarafından sağlanan verileri ile, emin olamaz) sizin için doğru olanı yapar onaylamak sonra, ben başka bir soru onu önerildiği gibi, iki adımda dinlenme yapabilirsiniz:
- Her URL etrafında bir bağlantı yapmak bu will bir bağlantı var şeyler için çift iç içe
<a>
etiketleri üretmek (! unless maç grup 1 şey) var zaten.
- Içteki birini kaldırarak, yanlış iç içe
<a>
etiketleri tara