我有以下正则表达式,它遇到哈希时需要停止匹配。
/[?&]+([^=&]+)=([^&]*)/gi
http://website.com/1068?page=4&taco=cat#tasty
上述正则表达式将捕获cat#tasty
而不是最后一个捕获组中的cat
。我尝试了以下仅在存在哈希时才有效。
/[?&]+([^=&]+)=([^&]*)#/gi
如果网址没有哈希值,则不匹配。使哈希值可选 - #?
- 不起作用,因为最后一个捕获组的贪婪*
仍然抓取cat#tasty
。
答案 0 :(得分:2)
在JavaScript中解析URL的一种鲜为人知的方法是简单地创建一个元素并将其作为href属性提供给它!
var link=document.createElement('a')
link.href="http://website.com/1068?page=4&taco=cat#tasty"
alert(link.search) //?page=4&taco=cat
alert(link.hash) //#tasty
把它扔到那里。如果你只使用link.search(或者也许是link.search.substr(1))你的正则表达式,你就不必担心除了参数之外的任何东西。
答案 1 :(得分:1)
/[?&]+([^=&]+)=([^&#]*)/gi
虽然Ray指出,但有许多url解析器可用。