#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: // отсутствует, в конец строки добавляется запятая.