0

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

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

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

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

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

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

4

3 回答 3

0

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

<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-08-11T20:04:13.443 回答
0

我不会尝试在单个 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

于 2013-08-11T19:59:50.260 回答
0

正如 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 <'.match(/^((https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|! :,.;]*[-A-Z0-9+&@#/%=~_|])$/i)

无效的

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

于 2013-08-11T20:00:00.663 回答