Javascript 如何查找文本是否包含url字符串

Javascript 如何查找文本是否包含url字符串,javascript,Javascript,如何查找文本是否包含url字符串。我是说如果我有 Sometexthttp://daasddas some text 我希望通过javascript存储或制作为链接您必须使用正则表达式(regex)在文本块中查找URL模式 以下是指向相同问题和答案的链接: 您可以使用正则表达式查找URL,并将其替换为前导和尾随标记函数replaceurlwithhtmlinks(text) function replaceURLWithHTMLLinks(text) { var e

如何查找文本是否包含url字符串。我是说如果我有

Sometexthttp://daasddas some text
我希望通过javascript存储或制作为链接您必须使用正则表达式(regex)在文本块中查找URL模式

以下是指向相同问题和答案的链接:

您可以使用正则表达式查找URL,并将其替换为前导和尾随标记

函数replaceurlwithhtmlinks(text)
    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>"); 
    }
{ var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig; 返回文本。替换(exp,“”); }
而如果所有给定的URL都已满,则上述代码工作正常(http://mydomain.com),我在解析URL时遇到问题,如:

www.mydomain.com

i、 e.没有协议。 因此,我在函数中添加了一些简单的代码:

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;
var exp=/(\b(((https?;ftp | file |)):\/\/)(www[。])[-A-Z0-9+&@#\/%?=~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig;
var temp=text.replace(exp,“”);
var结果=”;
而(温度长度>0){
var pos=temp.indexOf(“href=\”);
如果(位置==-1){
结果+=温度;
打破
}
结果+=温度子串(0,位置+6);
温度=温度子串(位置+6,温度长度);
如果((临时索引(“:/”)大于8)| |(临时索引(“:/”==-1)){
结果+=“http://”;
}
}
返回结果;
如果有人需要更好的解决方案来为URL添加默认协议,请告诉我!

我调整了设置,以便可以找到嵌入字符串中的URL。它不会找到google.com,如果是用户输入字段,这是必需的,用户可能会在句点/句点后省去空白。它还会找到wwww.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*)?

我对它进行了测试,它对我很有效,如果你遇到问题,请发表评论。

许多解决方案开始变得非常复杂,难以处理各种情况。我创建了一个函数来捕获任何以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;
}
函数转换文本(txtData){
var urlRegex=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig;
txtData=txtData.replace(urlRegex.);
var urlRegex=/(\b(\swww)。[-A-Z0-9+&@#\/%?=~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig;
txtData=txtData.replace(urlRegex.);
var urlRegex=/(>\swww)/ig;
txtData=txtData.replace(urlRegex,'>www');
var urlRegex=/(\“\swww)/ig;
txtData=txtData.replace(urlRegex,“)http://www');
返回txtData;
}
函数replaceurlwithhtmlinkhere(文本)
{
var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig;
返回文本。替换(exp,“”);
}
好的,我们在函数中得到了这个正则表达式

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

让我们理解这一点

//这是正则表达式的启动方式

\b>正在处理唯一且位于字符串开头的https或ftp或文件。这些关键字在中不应附加任何字符 从bbhttps或bbhttp开始,否则它将与这些不匹配

https?>此处?表示零或前面的字符或组之一。在这种情况下,s是可选的

|>匹配给定的一个,就像或一样

()>创建要匹配的组

/>表示下一个字符是特殊的,不能按字面解释。例如,前面没有“\”的“b”通常匹配小写 “b”出现在任何地方。但a'\b'本身与任何字符都不匹配

[]>这是字符类或字符集。它用于有一组字符,并且一次只能出现一个字符

[-A-Z0-9+&@#/%?=~|!:,.;]*>前面元素的出现次数为零或更多。例如,b*c与“c”、“bc”、“bbc”、“bbbc”等匹配

[-A-Z0-9+&@#/%=~|]>表示所有字符中的一个字符

i>不区分大小写的搜索。 g>全局搜索。

函数replaceURLWithLinks(文本){
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>";
    });
}
var text=“”; text=text.replace(/\r?\n/g,
); var result=URI.withinString(文本、函数(url){ 返回“”; }); }
但是兄弟,还有一个例子,如果有人键入mydomain.com,这里的$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>";
    });
}