【问题标题】:How to find if a text contains url string如何查找文本是否包含 url 字符串
【发布时间】:2011-10-06 03:42:15
【问题描述】:

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

Sometexthttp://daasddas some text

我希望 http://daasddas 被锚定或作为 javascript 链接

【问题讨论】:

    标签: javascript


    【解决方案1】:
        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 美元是多少。
    【解决方案2】:

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

    【讨论】:

    • 但是兄弟,如果有人输入 mydomain.com 会发生什么情况
    【解决方案3】:

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

    这是指向相同问题和答案的链接: Regular Expression to find URLs in block of Text (Javascript)

    【讨论】:

      【解决方案4】:

      我调整了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上测试过,对我有用,如果遇到问题,请评论。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          许多解决方案开始变得非常复杂,难以应对各种情况。这是我创建的一个函数,用于捕获以 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;
          }
          

          【讨论】:

            【解决方案7】:
              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|file)://[-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”、“bbbc”等。

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

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

            【讨论】:

              【解决方案8】:
              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>";
                  });
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-05-03
                • 1970-01-01
                • 2012-03-28
                • 2020-04-15
                • 1970-01-01
                • 1970-01-01
                • 2011-06-03
                相关资源
                最近更新 更多