2013-08-11 2 views
0

У меня есть простой вопрос. Как я могу сопоставить любую строку, которая не заключена в двойные кавычки, и/или < и > символов?Escape двойные кавычки регулярное выражение JavaScript

Пример. Я получил эту ссылку. И я не хочу сопоставлять его, если он заключен в двойные кавычки.

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

Это не работает, положив [^ "] на самом начале и в конце:

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

Поскольку ссылки, которые не заключены в двойных кавычках не будут согласована, если они не начнут с чем-то другим, чем doule цитаты.

+0

Я не очень понимаю, что вы пытаетесь соответствовать, и что вы не хотят совпадать. Можете ли вы привести пример? – Brad

+0

В чем проблема?Как будто вы пытаетесь сделать это. – Esailija

+0

Хорошо, вот ссылка. www.something.com Он должен соответствовать. С другой стороны: «www.something.com» или> www.something.com < не должен. – VolosBlur

ответ

0

я бы не попробовать сделать это в одном RegEx, поскольку, как вы заметили, это, вероятно, не будет работать.

Предполагая, что вы пытаетесь сделать s omething как автосвязывающие, включая дополнительные цитаты в этой категории, а затем отбрасывая их после того, как, будет работать:

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

0

Как предложил Esailija, окружая ваше регулярное выражение с^и $ будет работать , Попробуйте это в консоли. Вот регулярное выражение соответствие голую URL:

> '' http://www.something.com .match (/^((HTTPS | FTP | файл)? // [A-Z0-9 + & @ # /% = ! ~ _ |:.,;] * [- A-Z0-9 + & @ # /% = ~ _ |]) $/я)

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

и здесь не сопрягать URL, встроенный в двойные кавычки или угловые скобки:

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

нуль

> '>http://www.something.com <' .match (/^((HTTPS |? FTP | файл): // [-A-Z0-9 + & @ # /%? = ~ _ |!:,.;] * [- A-Z0-9 + & @ # /% = ~ _ |]) $/я)

нуль

не выбирайте этот ответ как Я просто повторяю то, что предложил Эсалия.

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> 

Может быть, это ваше регулярное выражение для связи, что является неправильным

Смежные вопросы