Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регексп ссылок (https://javascript.ru/forum/misc/54795-regeksp-ssylok.html)

Tecvid 01.04.2015 08:54

регексп ссылок
 
добрый день добрые люди)
есть рег /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

но он не работает так, как я хочу, находит абсолютно все ссылки, и даже a.bb поспринимает как ссылку, поэтому надо его изменить так, чтобы:

http://site.com (или с https) - находил

www.site.com, m.site.com и тому подобное - находил

site.com - НЕ находил

но если:
site.com/blabla - находил

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

спасибо заранее :)

ksa 01.04.2015 09:25

Цитата:

Сообщение от Tecvid (Сообщение 364343)
так, чтобы:

http://site.com (или с https) - находил

www.site.com, m.site.com и тому подобное - находил

site.com - НЕ находил

но если:
site.com/blabla - находил

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

Как вариант...

var re=[
	/^((https?:\/\/)|(www\.))[a-z]+\.[a-z]+/,
	/(^[a-z]+\.[a-z]+)(?=\/[a-z]+)/
];
var a=[
	'http://site.com',
	'https://site.com',
	'www.site.com',
	'site.com',
	'site.com/blabla'
];
for (var i=0; i<a.length; i++) {
	check(a[i]);
};
function check(Str) {
	alert(Str+' = '+(re[0].test(Str)||re[1].test(Str)));
};

Tecvid 01.04.2015 09:45

отлично, спасибо большое! то что нужно :)

Tecvid 01.04.2015 10:41

ваша регулярка перестала работать если передать строку вроде "посетите мой сайт: http://site.com"; :/
я хочу проверить тексты на наличие ссылок (вроде которых упомянул выше), и если найдётся, то их в тексте заменить на <a>, а остальной текст не трогать, например строка выше должен стать "посетите мой сайт": <a href=\"http://site.com\">http://site.com</a>";
а код такой текст оставляет как есть, но если до ссылки ничего нет, текст идёт только после ссылки, то он берёт весь текст в тег <а>

ksa 01.04.2015 11:06

Цитата:

Сообщение от Tecvid
я хочу проверить тексты на наличие ссылок (вроде которых упомянул выше)

Аааа. Убери ^ из регэкспа... Она означает "начало строки".

ksa 01.04.2015 11:18

Такой вариант для работы с текстом...

var txt='посетите мой сайт: http:\/\/site.com или [url]www.site.com[/url]. Т.к. наш site.com самый лучший и в нем есть папочка site.com\/blabla...';
alert(check(txt));
function check(Str) {
	var re=[
		/(((https?:\/\/)|(www\.))[a-z]+\.[a-z]+)/g,
		/([a-z]+\.[a-z]+\/[a-z]+)/g
	];
	for (var i=0; i<re.length; i++){
		Str=Str.replace(re[i],'<a href="$1">$1<\/a>');
	};
	return Str;
};

P.S.
BBкод (url) вставляет уже сам редактор...

Tecvid 01.04.2015 11:21

так, эта проблема решена) благодарю)
остался теперь заменить только совпадения на якорь, а не всю строку, и ещё, чуть не забыл, хочу исключить запятую, чтоб в "www.site.com," взял только саму ссылку, а то он и запятую включает :/

ksa 01.04.2015 11:22

А так...

var txt='посетите мой сайт: http:\/\/site.com или www\.site\.com. Т.к. наш site.com самый лучший и в нем есть папочка site.com\/blabla...';
alert(check(txt));
function check(Str) {
	var re=[
		/(((https?:\/\/)|(www\.))[a-z]+\.[a-z]+)/g,
		/([a-z]+\.[a-z]+\/[a-z]+)/g
	];
	for (var i=0; i<re.length; i++){
		Str=Str.replace(re[i],'<a href="$1">$1<\/a>');
	};
	return Str;
};

ksa 01.04.2015 11:23

Цитата:

Сообщение от Tecvid
чтоб в "www.site.com," взял только саму ссылку, а то он и запятую включает :/

Не, не включает... :no:

var txt='посетите мой сайт: http:\/\/site.com или www\.site\.com, т.к. наш site.com самый лучший и в нем есть папочка site.com\/blabla...';
alert(check(txt));
function check(Str) {
	var re=[
		/(((https?:\/\/)|(www\.))[a-z]+\.[a-z]+)/g,
		/([a-z]+\.[a-z]+\/[a-z]+)/g
	];
	for (var i=0; i<re.length; i++){
		Str=Str.replace(re[i],'<a href="$1">$1<\/a>');
	};
	return Str;
};

Tecvid 01.04.2015 11:26

пока писал, ответ уже дали :) огромное спасибо :) очень вам признателен)


Часовой пояс GMT +3, время: 11:44.