簡體   English   中英

轉義雙引號正則表達式JavaScript

[英]Escape double quotes regular expression JavaScript

我有一個簡單的問題。 如何匹配未用雙引號或/和<和>字符序列括起來的任何字符串?

例。 我得到了這個鏈接。 如果它用雙引號引起來,我也不想匹配它。

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

將[^“]放在開頭和結尾處是不起作用的:

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

因為沒有用雙引號引起來的鏈接將不匹配,除非它們以雙引號引起來。

我不會嘗試在單個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

正如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)://://-Z0-9 +&@#/%?=〜_ |! :,。;] * [-A-Z0-9 +&@#/%=〜_ |])$ / i)

空值

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

空值

不要選擇這個答案,因為我只是在重申Esailija的建議。

可能是因為這樣做有效:

<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>

也許是您的正則表達式鏈接錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM