我有一个简单的问题。如何匹配未用双引号括起来的任何字符串或/和<和>字符序列?
实施例。我有这个链接。如果它用双引号括起来,我不想匹配它。
((https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])
这不起作用,将[^“]放在开头和结尾处:
([^"](https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|][^"])
因为没有用双引号括起来的链接不会匹配,除非它们以除了doule引号之外的其他内容开头。
答案 0 :(得分: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);
答案 1 :(得分:0)
正如Esailija建议的那样,用^和$围绕你的正则表达式会起作用。在您的控制台中试试这个。这是匹配裸URL的正则表达式:
&GT; 'http://www.something.com' .match(/ ^((HTTPS | FTP |文件):// [2 -A-Z0-9 +&安培; @#/%=〜_ |:。;] * [-A-Z0-9 +&安培; @#/%=〜_ |])$ / I)
[“http://www.something.com”,“http://www.something.com”,“http”]
并且它不匹配嵌入双引号或尖括号中的URL:
&GT; ' “http://www.something.com”' .match(/ ^((HTTPS | FTP |文件):// [-A-Z0-9 +&安培; @#/%=〜_ | !:;] * [ - A-Z0-9 +&安培; @#/%=〜_ |])$ / I)
空
&GT; '&GT; http://www.something.com&LT;' 匹配(/ ^((HTTPS | FTP |文件):?// [-A-Z0-9 +&安培; @#/%=〜 _ |:。;] * [ - A-Z0-9 +&安培; @#/%=〜_ |])$ / I)
空
不要选择这个答案,因为我只是重申Esailija的建议。
答案 2 :(得分: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>
也许这是你的错误链接的正则表达式