1

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

正则表达式:

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

网址示例:

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

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

正则表达式测试:

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

如果 url 没有哈希,它将不匹配。使哈希成为可选的——#?也不起作用,因为*最后一个捕获组的贪婪仍然抓住了cat#tasty.

4

2 回答 2

2

在 JavaScript 中解析 URL 的一种鲜为人知的方法是简单地创建一个 a 元素并将 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))上做你的正则表达式,你就不必担心除了参数之外的任何东西。

于 2012-06-28T00:38:01.743 回答
1
/[?&]+([^=&]+)=([^&#]*)/gi

尽管正如 Ray 指出的那样,有许多 url 解析器可用。

于 2012-06-28T00:26:18.503 回答