2011-10-20 16 views
5

Ok cho phép nói rằng tôi có một URLURL phân tích cú pháp với JavaScript hoặc jQuery

example.com/hello/world/20111020 (có hoặc không có dấu gạch chéo). Điều tôi muốn làm là thoát khỏi url miền example.com. và sau đó phá vỡ hello world 20111020 thành một mảng. Nhưng vấn đề khác của tôi là. Đôi khi URL không có/hello/world/20111020 hoặc chỉ/hello/vì vậy trước tiên tôi cần phải xác định xem có gì sau example.com nếu không, sau đó không làm gì vì rõ ràng không có gì để làm việc. Tuy nhiên nếu có cái gì đó cho mỗi/tôi cần phải thêm nó vào mảng này theo thứ tự. Vì vậy, tôi có thể làm việc với mảng [0] và biết nó là hello.

Tôi đã thử một vài ngày trước nhưng đã gặp sự cố với dấu gạch chéo, nó vẫn phá vỡ tập lệnh, tôi rất tiếc đã bỏ ý tưởng đó. Và hôm nay tôi đang tìm kiếm những ý tưởng mới mẻ.

Trả lời

14

này này nên làm việc

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(); 

Bây giờ url_parts sẽ trỏ đến mảng ["hello", "world", "20111020"].

+0

'var url = window.location.href;' để phân tích cú pháp url hiện tại :) –

+0

Điều này không hiệu quả đối với tôi. Tôi chỉ nhận được example.com. – johnny

+0

@johnny Bạn nên lấy nội dung của mảng 'url_parts' chứ không phải đầu ra của lệnh' url_parts.shift() ' –

3

Bạn có thể sử dụng jQuery-URL-Parser plugin:

var file = $.url.attr("file"); 

Trong trường hợp của bạn, bạn có thể muốn sử dụng segment():

var segments = $.url('http://allmarkedup.com/folder/dir/example/index.html').segment(); 

// segments = ['folder','dir','example','index.html'] 
2
<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 && url.pathname != ""){ 
    var pathnameArray = url.pathname.split("/"); 
}else{ 

} 


} 
</script> 
+0

khi bạn đặt url.href được đặt lần đầu tiên, trình duyệt của khách hàng sẽ điền vào phần còn lại của giá trị. – DefyGravity

0

Tôi đã tạo ra các biểu thức chính quy sau cho URL

^https?://(((0|([1-9][0-9]{0,1}))(\.(0|([1-9][0-9]{0,1}))){3})|([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*(\.([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))(/|((/([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))$ 

Nó đã được viết cho MySql - Tôi chắc chắn với một chút không quan trọng bạn có thể làm cho nó bạn làm việc cho nhu cầu của bạn.

BTW - Tôi đã lấy ý tưởng từ một RFC - Số thoát cho tôi vào lúc này

+1

cái quái gì vậy? trông ấn tượng – Squirrl

0

Để phân tích URL, một phương pháp khác có thể sử dụng đối tượng DOM neo.

var a = document.createElement("A"); 
a.href = 'http://example.com:8080/path/to/resources?param1=val1&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=val1&params2=val2