达到某个字符时停止匹配

时间:2012-06-28 00:20:35

标签: javascript regex

我有以下正则表达式,它遇到哈希时需要停止匹配。

正则表达式:

/[?&]+([^=&]+)=([^&]*)/gi

网址示例:

http://website.com/1068?page=4&taco=cat#tasty

上述正则表达式将捕获cat#tasty而不是最后一个捕获组中的cat。我尝试了以下仅在存在哈希时才有效。

正则表达式测试:

/[?&]+([^=&]+)=([^&]*)#/gi

如果网址没有哈希值,则不匹配。使哈希值可选 - #? - 不起作用,因为最后一个捕获组的贪婪*仍然抓取cat#tasty

2 个答案:

答案 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解析器可用。