linkify i problem z nawiasami

w dziale Aplikacje dla Opery
kamwoj napisał(a):

Witam,
Ściągnąłem sobie UserJS'a o nazwie linkify-plus. Lekko go zmodyfikowałem (dodałem obsługę "emulowskich" linków ed2k oraz ustawiłem skrypt tak, by znaki "(" oraz ")" nie kończyły linku.
Oto ten plik: linkify-plus.user.js

Niestety ma to jedną wadę: jeśli ktoś poda link w nawiasach, czyli np tak:

(http://www.wp.pl)



ostatni nawias jest włączany do linku tak, że link prowadzi do strony

www.wp.pl)



Wie ktoś z was może jak to naprawić?

uniqiq napisał(a):

Nie widziałem oryginalnego skryptu (nie podałeś do niego odnośnika), ale podejrzewam, że wywaliłeś nawiasy z wyrażenia regularnego:

urlRE=/((?:https?|ftp|ed2k):\/\/[^\s'"'<>]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi;

Może zamień go na coś w stylu:
urlRE=/((?:https?|ftp|ed2k):\/\/([^\s'"'<>]*[^\s'"'<>\(\)])|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi;

kamwoj napisał(a):

Niestety z Twoim kodem działa tak samo. Nawias na końcu jest wcielany do linka.

Tu jest oryginalny plik: linkify-plus.user.js

W nim jest taka linijka:

urlRE=/((?:https?|ftp):\/\/[^\s'"'<>()]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi;


Usunąłem te nawiasy, bo jak np. nawias był w nazwie pliku, to link kończył się na nim właśnie i był niepoprawny. Teraz jest imho lepiej, ale do szczęścia brakuje jeszcze tylko ignorowania ostatniego znaku, jeśli jest to nawias

uniqiq napisał(a):

Może czegoś nie zrozumiałem. Jak odpalam

javascript: alert((/((?:https?|ftp):\/\/[^\s'"'<>]*|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi).exec("abc (http://test.org) qwe")[0])
to otrzymuję test.org).
Jak odpalam
javascript: alert((/((?:https?|ftp):\/\/([^\s'"'<>]*[^\s'"'<>()])|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi).exec("abc (http://test.org) qwe")[0])
to otrzymuję test.org. Dobrze sprawdziłeś moją poprawkę?

kamwoj napisał(a):

Cóż. Twoja poprawka usuwa ten błąd, ale jak np w linku jest nawias, to link sie kończy na nawiasie.

Przykładem może być link do sieci emula np na tej stronie:
http://www.osloskop.net/r/_11.html

Chodzi o to, by nawias był ignorowany, jak jest na końcu linka, a jak jest w środku ma być brany pod uwagę. To jest taki mały szczegół, ale jednak jest.

Dodatkowo zauważyłem, że skrypt ten "rozwala" niektóre strony. Przykładem może być strona:
http://portalwiedzy.onet.pl/0,17280,1530946,1,czasopisma.html

Po prawej stronie zamiast spisu odnośników strona się krzaczy.

uniqiq napisał(a):

Jak wpisuję

javascript: alert((/((?:https?|ftp|ed2k):\/\/([^\s'"'<>]*[^\s'"'<>()])|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi).exec("abc (ed2k://|file|Cruel.Intentions.1999.PL.DVDRiP.XviD-NeoTG.(osloskop.net).avi|734015488|6A8C352650758C1F512B1A9A76E07EC8|/) qwe")[0])
dostaję ed2k://|file|Cruel.Intentions.1999.PL.DVDRiP.XviD-NeoTG.(osloskop.net).avi|734015488|6A8C352650758C1F512B1A9A76E07EC8|/

kamwoj napisał(a):

No ja też dostaje taki wynik, ale np na tej stronie jest podany link w komentarzach w nawiasach i ostatni nawias jest wciągany do adresu.
Mowa o tym komentarzu:

Jarek | IPHASH : 2U-CF-D3-OW | 08.02.2009, 14:01
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
Zerknijcie na test wydajności na ubucentrum.net (http://www.ubucentrum.net/2009/02/porownanie-wydajnosci-ubuntu-visty-i.html) Ubuntu, Vista, Windows 7



Choć widzę, że jak tu cytuję tamtą wypowiedź to wszystko jest w porządku. A to ci psikus! To ja już nic nie rozumiem. Tu działa, jak wrzucę alert javascriptu do adresu to działa, a na tamtej stronie nie działa ;/

A może ktoś wymyśli dlaczego ten skrypt rozwala niektóre strony?

EDIT:
To może inaczej bigsmile
Znalazłem taki skrypt: linkifier.js, który działa bardzo dobrze, nie rozwala stron i nawet wyłapuje linki bez podania http itp. na początku, ale nie wiem jak do niego dodać obsługę linków ed2k.

Może ktoś z Was to wykombinuje?

Próbowałem poprzez dodanie frazy "ed2k" w taki sposób:
var uriRe = /\b(?:(?:(?:file|gopher|news|[COLOR=red]ed2k|[/COLOR]nntp|telnet|http|ftp|https|ftps|sftp|irc) [...]


Niestety, w przypadku tego skryptu to nie pomaga.

daroc napisał(a):

Originally posted by kamil_w:

A może ktoś wymyśli dlaczego ten skrypt rozwala niektóre strony?


To chyba przez kropkę na końcu zdania, ale nie mogę wykombinować jak to naprawić w tym przypadku.