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

时间:2011-07-15 13:11:24

标签: javascript

如何找到文本是否包含url字符串。我的意思是,如果我有

Sometexthttp://daasddas some text

我希望将 http://daasddas 作为javascript的链接进行操作或制作

8 个答案:

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