синтаксический анализ URL с помощью JavaScript или jQuery

#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