如何找到文本是否包含url字符串。我的意思是,如果我有
Sometexthttp://daasddas some text
我希望将 http://daasddas 作为javascript的链接进行操作或制作
答案 0 :(得分:16)
function replaceURLWithHTMLLinks(text)
{
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
答案 1 :(得分:3)
虽然上面的代码在所有给定的URL都已满(http://mydomain.com)时效果很好,但我在解析URL时出现问题:
www.mydomain.com
即。没有协议。 所以我在函数中添加了一些简单的代码:
var exp = /(\b(((https?|ftp|file|):\/\/)|www[.])[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
var temp = text.replace(exp,"<a href=\"$1\" target=\"_blank\">$1</a>");
var result = "";
while (temp.length > 0) {
var pos = temp.indexOf("href=\"");
if (pos == -1) {
result += temp;
break;
}
result += temp.substring(0, pos + 6);
temp = temp.substring(pos + 6, temp.length);
if ((temp.indexOf("://") > 8) || (temp.indexOf("://") == -1)) {
result += "http://";
}
}
return result;
如果有人应该使用更优化的解决方案来为URL添加默认协议,请告诉我们!
答案 2 :(得分:1)
您必须使用正则表达式(正则表达式)来查找文本块中的URL模式。
以下是相同问题和答案的链接: Regular Expression to find URLs in block of Text (Javascript)
答案 3 :(得分:1)
我调整了dperinis regex-url script,以便可以找到嵌入字符串中的URL。它不会找到 google.com ,如果它是用户输入字段,则必须这样做,用户可能会在一段时间/完全停止后遗漏空白。它还会找到 www.google.com ,因为几乎没有人输入协议。
(?:((?:https?|ftp):\/\/)|ww)(?:\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]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?
我在www.regextester.com进行了测试,它对我有用,如果您遇到问题,请发表评论。
答案 4 :(得分:0)
您可以使用正则表达式查找URL并将其替换为带有前导和尾随标记的URL
答案 5 :(得分:0)
许多解决方案开始变得非常复杂并且难以在各种情况下工作。这是我创建的一个函数,用于捕获以http / https / ftp / file / www开头的任何URL。这对我来说就像一个魅力,它唯一没有添加链接的是用户输入的URL,而开头没有http或www(即google.com)。我希望这个解决方案对某些人有用。
function convertText(txtData) {
var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
txtData = txtData.replace(urlRegex, '<a href="$1">$1</a>');
var urlRegex =/(\b(\swww).[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
txtData = txtData.replace(urlRegex, ' <a href="$1">$1</a>');
var urlRegex =/(>\swww)/ig;
txtData = txtData.replace(urlRegex, '>www');
var urlRegex =/(\"\swww)/ig;
txtData = txtData.replace(urlRegex, '"http://www');
return txtData;
}
答案 6 :(得分:0)
function replaceURLWithHTMLLinksHere(text)
{
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
好的,我们在这里有正常的表达。
/(\ B(HTTPS | FTP |文件):// [2 -A-Z0-9 +&安培; @#/%=〜 |:!。,;] * [-A- Z0-9 +&安培; @#/%=〜 |])/ IG
让我们理解这一点。
/ /这就是正则表达式的开始。
\ b&gt;是加工https或ftp或文件是唯一的,并在字符串的开头。这些关键字不应该附加任何字符 像bbhttps或bbhttp一样开头,否则就不会匹配。
HTTPS? &GT;这里 ?表示前面的字符或组中的零个或一个。在这种情况下,s是可选的。
| &GT;就像OR一样匹配一个。
()&gt;创建要匹配的组
/&gt;意味着下一个字符是特殊的,不能按字面解释。例如,没有前面的'\'的'b'通常匹配小写 'b'无论发生在哪里。但'\ b'本身与任何角色都不匹配
[]&gt;这是字符类或字符集。它用于拥有一组字符,一次只能存在一个字符。
[ - A-Z0-9 +&amp; @#/%?= ~_ |!:,。;] *&gt;零个或多个前一个元素的出现。例如,b * c匹配“c”,“bc”,“bbc”,“bbbc”等。
[ - A-Z0-9 +&amp; @#/%= ~_ |]&gt;意味着这一切中的一个字符。
我&gt;不区分大小写的搜索。 g>全球搜索。
答案 7 :(得分:-1)
function replaceURLWithLinks(text){
var text = "";
text= text.replace(/\r?\n/g, '<br />');
var result = URI.withinString(text, function(url) {
return "<a href='"+url+"' target='_blank'>" + url + "</a>";
});
}