Регулярное выражение URL-адреса Javascript возвращает запятую в конце URL-адреса, есть способ это исправить?

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

У меня есть регулярное выражение для сопоставления URL-адресов. Оно очень хорошо подходит для всего, что написано с www. или начинается с http:// , но добавляет запятую к любым совпадающим URL-адресам. Например, когда я беру значение из текстовой области и сопоставляю его, а затем заменяю значение текстовой области соответствующим значением, в конце URL-адреса ставится запятая:

 var urlexp = /[-a-zA-Z0-9@:%_ .~#?amp;//=]{2,256}.[a-z]{2,4}b(/[-a-zA-Z0-9@:%_ .~#?amp;//=]*)?/gi;

$('button').click(function(){

var text = $('.textarea').val();
if((text.match(urlexp))) {

var urlMatch = urlexp.exec(text);

$('.textarea').val(urlMatch);
}
});
  

Когда я набираю http://www.google.com и нажмите кнопку http://www.google.com заменяется на http://www.google.com, что вызывает проблему, есть ли способ это исправить?

Ответ №1:

проблема не в регулярном выражении, а в том, что вы устанавливаете значение val.

попробуйте:

 $('.textarea').val(urlMatch[0]);
  

Комментарии:

1. Тип ошибки «регулярное выражение ‘urlMatch’ [null] не определено

2. Вы должны получить это, только если вы помещаете его в другую строку, поскольку вы будете выполнять регулярное выражение дважды, и второго совпадения не будет. У вас должен быть только один like with .exec() . Удалите g флаг из конца регулярного выражения, если это продолжает происходить ( g в /gi )

3. на самом деле я только что заметил, что если я добавлю http: //, он возвращает просто отлично, но если я опущу http, то запятая добавляется в конец. а что, если я использую это несколько раз?

Ответ №2:

Как насчет использования match:

 var textarea = $('.textarea');
var text = textarea.val();
var match = text.match(urlexp);

if (match) {
    textarea.val(match[0]);
}
  

Комментарии:

1. у меня это не работает, просто не возвращает результата, если перед URL-адресом указан http: //, то он работает нормально, но если http: // отсутствует, в конец строки добавляется запятая.