Utwórz najkrótsze wyrażenie regularne, które w przybliżeniu będzie pasowało do adresu URL w tekście podczas uruchamiania w JavaScript
Przykład:
"some text exampley.com".match(/your regular expression goes here/);
Wyrażenie regularne musi
- przechwytuj wszystkie prawidłowe adresy URL, które dotyczą http i https.
- nie martw się, że nie dopasujesz ciągów szukających adresów URL, które w rzeczywistości nie są poprawnymi adresami URL
super.awesome/cool
- być poprawny, gdy jest uruchamiany jako wyrażenie regularne JavaScript
Kryteria testowe:
Mecz:
- http://example.com
- http://example.com/
- http://example.com/super
- https://example.com/super
- przyklad.com/super
- przyklad.com
- example.com/su-per_duper/?add=yes&subtract=no
- example.com/archive/index.html
- twitter.com/#!/reply
- przyklad.com/234ret2398oent/234nth
- codegolf.stackexchange.com/questions/464
- crazy.wow.really.example.com/?cat=nth%3E
- przykład-przyklad.com
- przyklad1.com
Nie pasuje:
- przykład
- Super fajne
- Dzień dobry
- mogę
- Witaj.
Oto test, który może trochę wyjaśnić http://jsfiddle.net/MikeGrace/gsJyr/
Przepraszam za brak jasności, nie zdawałem sobie sprawy, jak okropnie pasujące są adresy URL.
code-golf
javascript
regular-expression
Mike Grace
źródło
źródło
\w
do wszystkiego Czy oczekujesz rereferencji dla różnych składników adresu URL?/:/
jako wyrażenia regularnego i dopasować prawidłowe URI i nie pasować do wszystkich przykładów z listy »Niezgodne«. Tak długo, jak idziesz tą trasą, pozostaje tylko pytanie: jakie jest najkrótsze wyrażenie regularne, które nie będzie pasowało do żadnego z ciągów przykładowych, ale nadal będzie przechwytywać wszystkie identyfikatory URI.Odpowiedzi:
nie pasuje do 3 łańcuchów, których nie powinien, pasuje do prawie wszystkiego;)
upd: wciąż nie pasuje do wszystkich 5
źródło
Ten działa:
Przechodzi testy na stronie http://jsfiddle.net/9BYdp/1/
Pasuje również:
źródło
http://user:[email protected]/path
To oczywiście nie robi tego, co zamierzasz, ale spełnia twoje kryteria:
„dopasuj wszystkie prawidłowe adresy URL, które dotyczą http i https”.
tak, na pewno będzie pasować.
„nie przejmuj się niepasowaniem ciągów szukających adresów URL, które w rzeczywistości nie są prawidłowymi adresami URL, takimi jak„ super.awesome / cool ””
tak, jasne, będzie wiele fałszywych trafień, ale powiedziałeś, że to nie ma znaczenia.
być poprawny, gdy jest uruchamiany jako wyrażenie regularne JavaScript
na pewno jak jajka działają tak, jak mówisz, że powinny.
Jeśli ten wynik NIE jest poprawną odpowiedzią, musisz być bardziej selektywny przy swoich kryteriach.
Aby być regułą, która działa zgodnie z Twoimi intencjami, tak naprawdę postępujesz potrzebę wdrożenia pełnego dopasowywania zgodnego RFC i dopasowujący zgodny pełny RFC będzie „nie martwić się o dopasowanie”.
Tak więc, jeśli chodzi o „pozwolenie na niedopasowanie”, musisz dokładnie określić które odchylenia od RFC są dopuszczalne.
Cokolwiek innego, a całe to ćwiczenie jest fikcją, ponieważ ludzie po prostu napiszą to, co dla nich działa lub jak im się podoba, i poświęcą „mając jakikolwiek sens” na rzecz bycia niskim (jak ja).
Na twojej aktualizacji
Najbardziej naiwnym wyrażeniem regularnym, jakie mogę wymyślić z tymi dopasowaniami (i przechwytuje) wszystkie wklejone do tej pory przykłady:
Ma dość prosty charakter i zakłada, że możliwe są tylko 3 podstawowe formy.
z
może być niczym innym niż spacją.x
może być czymkolwiek innym niż spacja.y
może być wszystkim, co nie jest ani białą spacją, ani znakiem „/”.Jest wiele rzeczy, które będą obowiązywać dla tej reguły, wiele, ale przynajmniej będą wyglądać jak poprawne URI dla człowieka, po prostu nie będą zgodne ze specyfikacjami.
na przykład:
Myślę, że rozsądnym podejściem jest wyodrębnienie rzeczy, które mogą należeć do URI, a następnie zweryfikowanie ich za pomocą czegoś bardziej rygorystycznego. Patrzę, jak wymyślić, jak używać klasy URI przeglądarki do sprawdzania ich poprawności =).
Ale powyższe rozumowanie działa na tym przykładzie tutaj: http://jsfiddle.net/mHbXx/
źródło
/:/
nawet po edycji :-)Spróbuj tego.
Dołączam wiodące i końcowe ukośniki, które ograniczają wyrażenie regularne, więc mam nadzieję, że nie zaszkodzi to mojej liczbie postaci!
Ten wzorzec ogranicza protokół do http lub https, dopuszcza opcjonalny numer portu, a następnie dopuszcza dowolny znak oprócz białych znaków.
źródło