2013-08-29 26 views
5

Xin chào, tôi đang cố gắng khớp một URL cụ thể cho phép chuỗi truy vấn. Về cơ bản tôi cần những điều sau đây xảy ra:Regex để đối sánh URL cụ thể với Chuỗi truy vấn

  • http://some.test.domain.com - Vượt qua
  • http://some.test.domain.com/ - Vượt qua
  • http://some.test.domain.com/home - Vượt qua
  • http://some.test.domain.com/?id=999 - Vượt qua
  • http://some.test.domain.com/home?id=888&rt=000 - Vượt qua
  • http://some.test.domain.com/other - thất bại
  • http://some.test.domain.com/another?id=999 - Thất bại

Dưới đây là những gì tôi có cho đến nay:

var pattern = new RegExp('^(https?:\/\/some\.test\.domain\.com(\/{0,1}|\/home{0,1}))$'); 
if (pattern.test(window.location.href)){ 
    console.log('yes'); 
} 

Đoạn mã trên chỉ hoạt động cho ba người đầu tiên và không cho các chuỗi truy vấn. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn.

+1

Bạn có thể giải thích tại sao những người vượt qua và lý do tại sao những người đó không thành công? Logic ở đây là gì? Chỉ có gì và '/ home' được cho phép? –

+0

@JamesMontagne Tôi chỉ muốn năm điều kiện đầu tiên hoạt động. Bất cứ điều gì khác nên thất bại. –

+0

@progenhard Có, tôi cũng cần phải nhận được năm liên kết hàng đầu để vượt qua. –

Trả lời

4

Một mô hình như thế này nên làm việc (ít nhất là cho lĩnh vực cụ thể của bạn)

/^http:\/\/some\.test\.domain\.com(\/(home)?(\?.*)?)?$/ 

này sẽ phù hợp với một literal http://some.test.domain.com tùy chọn tiếp theo tất cả của một chữ cái /, theo tùy chọn, theo sau là một chữ số home theo nghĩa đen, theo sau làtheo nghĩa đen 10 và bất kỳ số ký tự nào khác.

Bạn có thể thử nghiệm nó here

+0

Tôi sẽ cố gắng làm cho nó chỉ với một người đàn ông nhóm chụp. – progrenhard

+0

@progenhard Không rõ ràng với tôi rằng OP quan tâm đến việc bắt giữ các nhóm, nhưng chắc chắn, bất kỳ nhóm nào đều có thể được chuyển thành các nhóm không bắt được khá dễ dàng (ví dụ: '… (?: \/(?: home)? (? : \?. *)?)? $/') –

+0

Mã sử ​​dụng' pattern.test'. Tôi không thể nghĩ ra bất kỳ lý do gì nếu các nhóm đang chụp hay không. –

1

Không sử dụng Regex, sử dụng trình phân tích cú pháp URL. Bạn có thể sử dụng purl

Sau đó, bạn sẽ thực hiện:

url = "http://some.test.domain.com/home" // Or any other 
purl(url).attr('path') // is equal to "home" here. 

Bạn sẽ chỉ cần phải kiểm tra .attr('path') chống lại những con đường chấp nhận của bạn (dường như "", "/", và "home").


Dưới đây là một số lượng mẫu:

purl("http://some.test.domain.com/?qs=1").attr('path') 
"/" 
purl("http://some.test.domain.com/other").attr("path") 
"/other" 
purl("http://some.test.domain.com/home").attr("path") 
"/home" 
+0

'# bình luận này;' – Qtax

+0

@Qtax Haha cảm ơn, tôi đã suy nghĩ bằng Python vì một số lý do: l –

+0

@ThomasOrozco Cảm ơn bạn đã nhập, nhưng tôi bị giới hạn ở jQuery 1.9 –

Các vấn đề liên quan