【问题标题】:Escape double quotes regular expression JavaScript转义双引号正则表达式 JavaScript
【发布时间】:2013-08-11 19:26:56
【问题描述】:

我有一个简单的问题。如何匹配未包含在双引号或/和 字符序列中的任何字符串?

示例。我得到了这个链接。如果它用双引号括起来,我不想匹配它。

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

这不起作用,将 [^"] 放在开头和结尾:

([^"](https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|][^"])

因为没有用双引号括起来的链接将不会被匹配,除非它们以非双引号开头。

【问题讨论】:

  • 我真的不明白你想匹配什么,你不想匹配什么。你能举个例子吗?
  • 您遇到的实际问题是什么?比如你想用这个做什么。
  • 好的,这里有一个链接。 www.something.com 它应该匹配。另一方面:“www.something.com”或>www.something.com
  • 那么/^((https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])$/?
  • 不,它不起作用。我开始认为这是不可能的。

标签: javascript regex


【解决方案1】:

我不会尝试在单个 RegEx 中执行此操作,因为正如您所注意到的,它可能无法正常工作。

假设您正在尝试执行自动链接之类的操作,包括搜索中的可选引号,然后在之后丢弃它们,将会起作用:

var re = /"?(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]"?/gi;
var quoted = /^".+"$/;

var txt = 'A real link: http://www.example.com and a quoted link: "http://www.example.com".';

txt = txt.replace(re, 
            function(str) {
              if (str.match(quoted))
                return str;
              else
                return '<a href="' + str + '">' + str + '</a>';
            }
            );

$('#mydiv').html(txt);

一个工作示例:http://codepen.io/paulroub/pen/nlExh

【讨论】:

    【解决方案2】:

    正如 Esailija 建议的那样,用 ^ 和 $ 包围你的正则表达式会起作用。在您的控制台中尝试此操作。这是匹配裸 URL 的正则表达式:

    > 'http://www.something.com'.match(/^((https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;] *[-A-Z0-9+&@#/%=~_|])$/i)

    ["http://www.something.com", "http://www.something.com", "http"]

    这里它不匹配嵌入在双引号或尖括号中的 URL:

    >'"http://www.something.com"'.match(/^((https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,. ;]*[-A-Z0-9+&@#/%=~_|])$/i)

    >'>http://www.something.com

    不要选择这个答案,因为我只是在重申 Esailija 的建议。

    【讨论】:

      【解决方案3】:

      这是可能的,因为这有效:

      <script>
      
      var str='https://test.com/';
      var patt=/[^"].*[^"]/g;
      
      var result=patt.test(str);
      document.write("Returned value: " +  result); 
      
      str='"http://test.com/"';
      result=patt.test(str);
      document.write("<br>Returned value: " +  result);
      
      </script>
      </body>
      </html>
      

      也许是您的链接正则表达式错误

      【讨论】:

        猜你喜欢
        • 2013-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多