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

How to find if a text contains url string

本文关键字:是否 包含 url 字符串 文本 何查找 查找      更新时间:2023-09-26

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

Sometexthttp://daasddas some text

我想要http://daasddas作为javascript 的链接进行搜索

    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>"); 
    }

如果所有给定的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添加默认协议,请告诉我!

您必须使用regex(正则表达式(在文本块中查找URL模式。

以下是相同问题和答案的链接:正则表达式在文本块(Javascript(中查找URL

我调整了dperinis regex url脚本,以便可以找到嵌入字符串中的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上测试了它,它对我有效,如果你遇到问题,请评论。

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

许多解决方案开始变得非常复杂,很难在各种情况下使用。下面是我创建的一个函数,用于捕获以http/https/ftp/file/w开头的任何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;
}
  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|文件(://[-A-Z0-9+&@#/%?=~|!:,.;]*[-A-Z0-9+&@#/%=~|](/ig

让我们理解这一点。

//正则表达式就是这样开始的。

''b>正在处理https或ftp或唯一的文件,该文件位于字符串的开头。这些关键字在中不应该有任何字符与bbhttps或bbhttp一样,它在其他方面将不匹配。

https?>在这里表示前一个字符或组中的零或一。在这种情况下,s是可选的。

|>匹配给定值中的一个,就像OR一样。

((>创建要匹配的组

/>表示下一个字符是特殊的,不能从字面上解释。例如,前面没有"''"的"b"通常与小写字母匹配b是它们出现的地方。但是'''b'本身与任何字符都不匹配

[]>这是字符类或字符集。它通常有一组字符,一次只出现所有字符中的一个。

[-A-Z0-9+&@#/%?=~_|!:,.;]*>前一元素出现零次或多次。例如,b*c匹配"c"、"bc"、"bbc"answers"bbbc"等。

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

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

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>";
    });
}