दिलचस्प पोस्ट
एंड्रॉइड एसडीके: इसे प्रदर्शित किए बिना कच्चे पूर्वावलोकन कैमरा छवि प्राप्त करें Htaccess के साथ एक विशेष निर्देशिका के लिए सभी बॉट / क्रॉलर्स / मकड़ियों को ब्लॉक करें ऑफ़लाइन उपयोग के लिए Google मानचित्र टाइल कैश कैसे करें? Node.js में एक HTTPS सर्वर कैसे बनाऊँ? क्या आप mysql में WHERE खंड में एक उपनाम का उपयोग कर सकते हैं? SQL सर्वर धुरी बनाम एकाधिक शामिल Android इम्यूलेटर में लैंडस्केप मोड पर स्विच करना एनएसओपरेशन बनाम ग्रांड सेंट्रल डिस्पैच आईबीओटलेट और आईबीएसीएशन InstallUtil.exe के बिना एक .NET विंडो सेवा स्थापित करें UIAlertController में UIAlertAction को छवि जोड़ें मध्यवर्ती और वितरित संस्करण नियंत्रण प्रणालियों के बीच तुलना जेडीके 8 – "टाइप करें java.util.Map $ Entry का समाधान नहीं किया जा सकता" मैं अपने जावा अनुप्रयोग में फ़ाइलों को कैसे लोड करूँ? क्या ऑटोमैपर लिंक का समर्थन करता है?

जावास्क्रिप्ट के साथ पाठ में यूआरएल की पहचान

क्या किसी को स्ट्रिंग के सेट में यूआरएल का पता लगाने के लिए कोई सुझाव है?

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

अद्यतन: लिंक पता लगाने के लिए इस regex का उपयोग कर मैं घाव हो गया … जाहिरा तौर पर कई सालों बाद

 kLINK_DETECTION_REGEX = /(([az]+:\/\/)?(([a-z0-9\-]+\.)+([az]{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 

पूर्ण सहायक (वैकल्पिक हैंडलेबर्स समर्थन के साथ) gist # 1654670 पर है

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट के साथ पाठ में यूआरएल की पहचान"

पहले आपको एक अच्छा regex की आवश्यकता है जो यूआरएल से मेल खाता है। यह करना कठिन है यहां और यहां देखें:

… लगभग एक वैध URL है विभाजन के लिए कुछ विराम चिह्न हैं। किसी भी विराम चिह्न अनुपस्थित है, आपके पास अभी भी मान्य URL है।

आरएफसी को ध्यान से देखें और देखें कि क्या आप "अमान्य" URL का निर्माण कर सकते हैं नियम बहुत लचीले हैं

उदाहरण के लिए ::::: एक मान्य यूआरएल है। पथ ":::::" एक बहुत बेवकूफ़ फ़ाइल नाम है, लेकिन एक वैध फ़ाइल नाम।

इसके अलावा, ///// एक मान्य यूआरएल है। नेटलोक ("होस्टनाम") "" । पथ "///" फिर, बेवकूफ। वैध भी है यह URL "///" को सामान्य करता है जो कि बराबर है

"bad://///worse/////" ऐसा बिल्कुल मान्य है। गूंगा लेकिन मान्य

वैसे भी, यह जवाब आपको सर्वश्रेष्ठ रेगेक्स देने के लिए नहीं बल्कि इसका एक प्रमाण है कि जावास्क्रिप्ट के साथ पाठ के अंदर स्ट्रिंग रैपिंग कैसे करें।

ठीक है, तो इसका उपयोग करें: /(https?:\/\/[^\s]+)/g

फिर, यह एक बुरा रेगेक्स है इसके कई झूठे सकारात्मक होंगे। हालांकि इस उदाहरण के लिए यह काफी अच्छा है।

 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>" 

तो राशि में प्रयास करें:

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

मेरे Regex के रूप में उपयोग करने के लिए मैं यहाँ समाप्त हुआ हूं:

 var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 

इसमें URL में अनुवर्ती विराम चिह्न शामिल नहीं है क्रिसेंट का फ़ंक्शन एक आकर्षण की तरह काम करता है 🙂 तो:

 function linkify(text) { var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return text.replace(urlRegex, function(url) { return '<a href="' + url + '">' + url + '</a>'; }); } 

मैं इस समस्या को काफी समय तक चला गया, फिर मेरे लिए यह हुआ कि एक एंड्रॉइड विधि, एंड्रॉइड। टेक्स्ट। यूटिल.लिंकइफ़, जो इसे पूरा करने के लिए कुछ बहुत मजबूत रीजेक्सेस का इस्तेमाल करती है। सौभाग्य से, एंड्रॉइड ओपन सोर्स है।

वे विभिन्न प्रकार के यूआरएल मिलान करने के लिए कुछ भिन्न पैटर्न का उपयोग करते हैं। आप यहां उन सभी को पा सकते हैं: 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

यदि आप केवल यूआरएल के बारे में चिंतित हैं जो WEB_URL_PATTERN से मेल खाते हैं, अर्थात यूआरएल जो आरएफसी 1738 स्पेक के अनुरूप है, तो आप इसका उपयोग कर सकते हैं:

 /((?:(http|https|Http|Https|rtsp|Rtsp):\/\/(?:(?:[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&\=]|(?:\%[a-fA-F0-9]{2})){1,64}(?:\:(?:[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&\=]|(?:\%[a-fA-F0-9]{2})){1,25})?\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}\.)+(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eouw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\:\d{1,5})?)(\/(?:(?:[a-zA-Z0-9\;\/\?\:\@\&\=\#\~\-\.\+\!\*\'\(\)\,\_])|(?:\%[a-fA-F0-9]{2}))*)?(?:\b|$)/gi; 

यहां स्रोत का पूरा पाठ है:

 "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?" + "((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+" // named host + "(?:" // plus top level domain + "(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])" + "|(?:biz|b[abdefghijmnorstvwyz])" + "|(?:cat|com|coop|c[acdfghiklmnoruvxyz])" + "|d[ejkmoz]" + "|(?:edu|e[cegrstu])" + "|f[ijkmor]" + "|(?:gov|g[abdefghilmnpqrstuwy])" + "|h[kmnrtu]" + "|(?:info|int|i[delmnoqrst])" + "|(?:jobs|j[emop])" + "|k[eghimnrwyz]" + "|l[abcikrstuvy]" + "|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])" + "|(?:name|net|n[acefgilopruz])" + "|(?:org|om)" + "|(?:pro|p[aefghklmnrstwy])" + "|qa" + "|r[eouw]" + "|s[abcdeghijklmnortuvyz]" + "|(?:tel|travel|t[cdfghjklmnoprtvwz])" + "|u[agkmsyz]" + "|v[aceginu]" + "|w[fs]" + "|y[etu]" + "|z[amw]))" + "|(?:(?:25[0-5]|2[0-4]" // or ip address + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]" + "|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]" + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}" + "|[1-9][0-9]|[0-9])))" + "(?:\\:\\d{1,5})?)" // plus option port number + "(\\/(?:(?:[a-zA-Z0-9\\;\\/\\?\\:\\@\\&\\=\\#\\~" // plus option query params + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?" + "(?:\\b|$)"; 

यदि आप वास्तव में फैंसी होना चाहते हैं, तो आप ईमेल पते के लिए भी परीक्षण कर सकते हैं। ईमेल पते के लिए regex है:

 /[a-zA-Z0-9\\+\\.\\_\\%\\-]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+/gi 

पीएस: उपरोक्त regex द्वारा समर्थित उच्च स्तर डोमेन जून 2007 के रूप में चालू हैं। एक अप टू डेट लिस्ट के लिए आपको https://data.iana.org/TLD/tlds-alpha-by-domain.txt की जांच की आवश्यकता होगी ।

क्रिसेंट ताज़ा जवाब पर आधारित

अगर आप http: // या http: // के साथ और www से लिंक का पता लगाना चाहते हैं आप निम्नलिखित का उपयोग कर सकते हैं

 function urlify(text) { var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g; //var urlRegex = /(https?:\/\/[^\s]+)/g; return text.replace(urlRegex, function(url,b,c) { var url2 = (c == 'www.') ? 'http://' +url : url; return '<a href="' +url2+ '" target="_blank">' + url + '</a>'; }) } 

फ़ंक्शन को छवियों को रेंडर करने के लिए और भी सुधार किया जा सकता है:

 function renderHTML(text) { var rawText = strip(text) var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return rawText.replace(urlRegex, function(url) { if ( ( url.indexOf(".jpg") > 0 ) || ( url.indexOf(".png") > 0 ) || ( url.indexOf(".gif") > 0 ) ) { return '<img src="' + url + '">' + '<br/>' } else { return '<a href="' + url + '">' + url + '</a>' + '<br/>' } }) } 

या एक थंबनेल छवि के लिए जो आकार की छवि को लिंक करता है:

 return '<a href="' + url + '"><img style="width: 100px; border: 0px; -moz-border-radius: 5px; border-radius: 5px;" src="' + url + '">' + '</a>' + '<br/>' 

और यहां स्ट्रिप () फ़ंक्शन है जो किसी मौजूदा HTML को निकालकर एकरूपता के लिए पाठ स्ट्रिंग को प्री-प्रोसेस करती है।

 function strip(html) { var tmp = document.createElement("DIV"); tmp.innerHTML = html; var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return tmp.innerText.replace(urlRegex, function(url) { return '\n' + url }) } 

एनपीएम पर यह पुस्तकालय ऐसा लगता है कि यह बहुत व्यापक है https://www.npmjs.com/package/linkifyjs

Linkify एक छोटे से अभी तक व्यापक जावास्क्रिप्ट प्लगइन है, जो सादे टेक्स्ट में यूआरएल खोजने और उन्हें एचटीएमएल लिंक में परिवर्तित करने के लिए है। यह सभी मान्य यूआरएल और ईमेल पते के साथ काम करता है।

tmp.innerText अपरिभाषित है आपको tmp.innerHTML का उपयोग करना चाहिए

 function strip(html) { var tmp = document.createElement("DIV"); tmp.innerHTML = html; var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; return tmp.innerHTML .replace(urlRegex, function(url) { return '\n' + url }) 

इसे इस्तेमाल करे:

 function isUrl(s) { if (!isUrl.rx_url) { // taken from https://gist.github.com/dperini/729294 isUrl.rx_url=/^(?:(?:https?|ftp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[az\u00a1-\uffff0-9]-*)*[az\u00a1-\uffff0-9]+)(?:\.(?:[az\u00a1-\uffff0-9]-*)*[az\u00a1-\uffff0-9]+)*(?:\.(?:[az\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/i; // valid prefixes isUrl.prefixes=['http:\/\/', 'https:\/\/', 'ftp:\/\/', 'www.']; // taken from https://w3techs.com/technologies/overview/top_level_domain/all isUrl.domains=['com','ru','net','org','de','jp','uk','br','pl','in','it','fr','au','info','nl','ir','cn','es','cz','kr','ua','ca','eu','biz','za','gr','co','ro','se','tw','mx','vn','tr','ch','hu','at','be','dk','tv','me','ar','no','us','sk','xyz','fi','id','cl','by','nz','il','ie','pt','kz','io','my','lt','hk','cc','sg','edu','pk','su','bg','th','top','lv','hr','pe','club','rs','ae','az','si','ph','pro','ng','tk','ee','asia','mobi']; } if (!isUrl.rx_url.test(s)) return false; for (let i=0; i<isUrl.prefixes.length; i++) if (s.startsWith(isUrl.prefixes[i])) return true; for (let i=0; i<isUrl.domains.length; i++) if (s.endsWith('.'+isUrl.domains[i]) || s.includes('.'+isUrl.domains[i]+'\/') ||s.includes('.'+isUrl.domains[i]+'?')) return true; return false; } function isEmail(s) { if (!isEmail.rx_email) { // taken from http://stackoverflow.com/a/16016476/460084 var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; var sQuotedPair = '\\x5c[\\x00-\\x7f]'; var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d'; var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22'; var sDomain_ref = sAtom; var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')'; var sWord = '(' + sAtom + '|' + sQuotedString + ')'; var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*'; var sLocalPart = sWord + '(\\x2e' + sWord + ')*'; var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec var sValidEmail = '^' + sAddrSpec + '$'; // as whole string isEmail.rx_email = new RegExp(sValidEmail); } return isEmail.rx_email.test(s); } 

google.com , http://www.google.bla , http://google.bla , www.google.bla जैसे यूआरएल भी पहचान लेंगे लेकिन google.bla नहीं