Создайте самое короткое регулярное выражение, которое будет примерно соответствовать URL в тексте при запуске в JavaScript
Пример:
"some text exampley.com".match(/your regular expression goes here/);
Регулярное выражение должно
- захватить все действительные URL-адреса, которые для http и https.
- не беспокойтесь о несоответствии для строк поиска URL, которые на самом деле не являются действительными URL-адресами, такими как
super.awesome/cool
- быть действительным при запуске в качестве регулярного выражения JavaScript
Критерии испытаний:
Совпадение:
- http://example.com
- http://example.com/
- http://example.com/super
- https://example.com/super
- example.com/super
- example.com
- example.com/su-per_duper/?add=yes&subtract=no
- example.com/archive/index.html
- twitter.com/#!/reply
- example.com/234ret2398oent/234nth
- codegolf.stackexchange.com/questions/464
- crazy.wow.really.example.com/?cat=nth%3E
- example-example.com
- example1.com
Не соответствует:
- пример
- очень круто
- Доброе утро
- Я могу
- Здравствуйте.
Вот тест, который может помочь немного прояснить http://jsfiddle.net/MikeGrace/gsJyr/
Я прошу прощения за отсутствие ясности, я не понял, насколько ужасно соответствовали URL.
code-golf
javascript
regular-expression
Майк Грейс
источник
источник
\w
для всего Вы ожидаете обратных ссылок для различных компонентов URL?/:/
в качестве регулярного выражения и сопоставлять допустимые URI, и не соответствовать всем вашим примерам в списке »Не совпадает«. Пока вы идете по этому маршруту, это просто вопрос: каково самое короткое регулярное выражение, которое не будет соответствовать ни одной из строк примера, но все же перехватит все URI.Ответы:
не соответствует 3 строкам, которые не должны, соответствует почти чему-либо еще;)
upd: все равно не соответствует всем 5
источник
Этот работает:
Проходит тесты на http://jsfiddle.net/9BYdp/1/
Также соответствует:
источник
http://user:password@domain.com/path
Это, очевидно, не соответствует вашим намерениям, но соответствует вашим критериям:
msgstr "соответствовать всем действительным URL-адресам для http и https."
да, определенно будет соответствовать.
«не беспокойтесь о несоответствии для строк, выглядящих как URL, которые на самом деле не являются действительными URL, такими как« super.awesome / cool »»
да, конечно, будет много ложных срабатываний, но вы сказали, что это не имеет значения.
быть действительным при запуске в качестве регулярного выражения JavaScript
конечно, как яйца работают так, как вы говорите, должны.
Если этот результат НЕ верный ответ, то вам нужно быть более избирательным с вашими критериями.
Для того , чтобы быть правилом , что работает , как вы собираетесь, вы на самом деле сделать необходимость осуществления совместимого Искателя полного RFC, а также полного RFC совместимых согласовани будут «беспокоиться о не соответствует».
Таким образом, в терминах «разрешение не соответствует» необходимо указать , какие именно отклонения от RFC допустимы.
Все остальное, и все это упражнение является обманом, потому что люди просто напишут все, что работает для них, или как им это нравится, и пожертвуют «осмыслением» ради того, чтобы быть короткими (как я сделал).
На вашем обновлении
Самое наивное регулярное выражение, которое я могу придумать, которое соответствует (и захватывает) все ваши вставленные примеры:
Он довольно прост по своей природе и предполагает только 3 основных формы.
z
может быть пыльник, а не пробел.x
может быть все, что не является пробелом.y
может быть чем-либо, что не является ни пробелом, ни символом '/'.Есть много вещей, которые будут применимы к этому правилу, но они по крайней мере будут выглядеть как действительный URI для человека, они просто не будут совместимы со спецификациями.
например:
Я думаю, что разумный подход состоит в том, чтобы извлечь вещи, которые, вероятно, являются URI, а затем проверить их более строгим образом, я смотрю на разработку того, как использовать класс URI браузера для проверки их =).
Но вы можете увидеть приведенные выше рассуждения, работающие над этим образцом здесь: http://jsfiddle.net/mHbXx/
источник
/:/
даже после редактирования :-)Попробуй это.
Я включаю начальные и конечные слэши, которые ограничивают регулярное выражение, так что, надеюсь, это не повредит количеству моих персонажей!
Этот шаблон ограничивает протокол протоколом http или https, позволяет указать необязательный номер порта, а затем разрешает ввод любых символов, кроме пробелов.
источник