#javascript #jquery #parsing #url #slug
#javascript #jquery #синтаксический анализ #url #слизняк
Вопрос:
Хорошо, допустим, у меня есть URL
example.com/hello/world/20111020 (с косой чертой или без нее). Что я хотел бы сделать, так это удалить из URL домен example.com . а затем разбейте hello world 20111020 на массив. Но у меня другая проблема. Иногда в URL-адресе нет /hello/world/20111020 или просто /hello /, поэтому мне нужно сначала определить, есть ли что-нибудь после example.com если нет, то ничего не делайте, так как очевидно, что работать не с чем. Однако, если там есть что-то для каждого /, мне нужно добавить это в этот массив по порядку. Поэтому я могу работать с массивом [0] и знать, что это был hello.
Я попробовал кое-что пару дней назад, но столкнулся с проблемами с завершающими косыми чертами, которые продолжали нарушать сценарий, я, к сожалению, отказался от этой идеи. И сегодня я ищу свежие идеи.
Ответ №1:
Это должно сработать
var url = 'example.com/hello/world/20111020/';
//get rid of the trailing / before doing a simple split on /
var url_parts = url.replace(//s*$/,'').split('/');
//since we do not need example.com
url_parts.shift();
Теперь url_parts
будет указывать на массив ["hello", "world", "20111020"]
.
Комментарии:
1.
var url = window.location.href;
чтобы проанализировать текущий URL 🙂2. @johnny Вы должны принимать содержимое
url_parts
массива, а не вывод командыurl_parts.shift()
Ответ №2:
Вы можете использовать плагин jQuery-URL-Parser:
var file = $.url.attr("file");
В вашем случае вы, вероятно, захотите использовать segment()
:
var segments = $.url('http://allmarkedup.com/folder/dir/example/index.html').segment();
// segments = ['folder','dir','example','index.html']
Ответ №3:
<script type="text/javascript">
function splitThePath(incomingUrl){
var url = document.createElement("a");
url.href = incomingUrl;
//url.hash Returns the anchor portion of a URL
//url.host Returns the hostname and port of a URL
//url.hostname Returns the hostname of a URL
//url.href Returns the entire URL
//url.pathname Returns the path name of a URL
//url.port Returns the port number the server uses for a URL
//url.protocol Returns the protocol of a URL
//url.search Returns the query portion of a URL
if(url.pathname amp;amp; url.pathname != ""){
var pathnameArray = url.pathname.split("/");
}else{
}
}
</script>
Комментарии:
1. когда вы задаете url.href устанавливается в первый раз, браузер клиента заполняет остальные значения.
Ответ №4:
Я создал следующее регулярное выражение для URL-адресов
^https?://(((0|([1-9][0-9]{0,1}))(.(0|([1-9][0-9]{0,1}))){3})|([a-zA-Z]([a-zA-Z0-9$-_@.amp; !*"'(),]|(%[0-9a-fA-F][0-9a-fA-F]))*(.([a-zA-Z]([a-zA-Z0-9$-_@.amp; !*"'(),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))(/|((/([a-zA-Z]([a-zA-Z0-9$-_@.amp; !*"'(),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))$
Он был написан для MySQL — я уверен, что, немного повозившись, вы сможете заставить его работать в соответствии с вашими потребностями.
Кстати — я взял идею из RFC — в данный момент число ускользает от меня
Ответ №5:
Для синтаксического анализа URL-адресов можно использовать другой подход — привязать объект DOM.
var a = document.createElement("A");
a.href = 'http://example.com:8080/path/to/resources?param1=val1amp;params2=val2#named-anchor';
a.protocol; // http:
a.host; // example.com:8080
a.hostname; //example.com
a.port; // 8080 (in case of port 80 empty string returns)
a.pathname; // /path/to/resources
a.hash; // #named-anchor
a.search // ?param1=val1amp;params2=val2