Я хочу сопоставить First url, а затем пробел с использованием выражения regex при вводе в поле ввода. Например: если я набираю www.google.com, его следует сопоставлять только после пробела, за которым следует URL-адрес, например www.google.com<SPACE>
$(".site").keyup(function()
{
var site=$(this).val();
var exp = /^http(s?):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
var find = site.match(exp);
var url = find? find[0] : null;
if (url === null){
var exp = /[-\w]+(\.[a-z]{2,})+(\S+)?(\/|\/[\w#!:.?+=&%@!\-\/])?/g;
var find = site.match(exp);
url = find? 'http://'+find[0] : null;
}
});
Пожалуйста, помогите, спасибо заранее
С взглядом:
var exp = /[-\w]+(\.[a-z]{2,})+(\S+)?(\/|\/[\w#!:.?+=&%@!\-\/])?(?= )/g;
Я только добавил это "(? =)" К вашему регулярному выражению.
вы должны использовать лучшее регулярное выражение для правильного соответствия части запроса и фрагмента вашего URL-адреса. Посмотрите здесь (что является лучшим регулярным выражением, чтобы проверить, является ли строка допустимым URL?) Для правильного IRI/URI-структурированного теста Regex.
Но вот рудиментарная версия:
var regex = /[-\w]+(\.[a-z]{2,})+(\/?)([^\s]+)/g;
var text = 'test google.com/?q=foo basdasd www.url.com/test?q=asdasd#cheese something else';
console.log(text.match(regex));
Ожидаемый результат:
["google.com/?q=foo", "www.url.com/test?q=asdasd#cheese"]
Если вы действительно хотите проверить URL-адреса, убедитесь, что вы включили схему, порт, имя пользователя и пароль, чтобы быть в безопасности.
В контексте того, чего вы пытаетесь достичь, вы должны действительно задержать некоторую задержку, чтобы не влиять на производительность браузера. Тесты Regex могут быть дорогими при использовании сложных правил, особенно при запуске одного и того же правила при каждом вводе нового символа. Просто подумайте о том, чего вы пытаетесь достичь, и есть ли там лучшее решение, чтобы добраться туда.