当我有这样的网址时:
http://server/site?firstname=Jack&lastname=Daniels
我知道在我的 JavaScript 中,对名字的查询应该返回“Jack”。
但是在以下情况下,firstname 的查询应该返回什么:
http://server/site?lastname=Daniels
http://server/site?firstname&lastname=Daniels
http://server/site?firstname=&lastname=Daniels
[编辑]回答一些评论:以上都是合法的查询字符串,我的问题不是关于如何检索参数,而是如何解释它们。
作为记录,我使用以下涵盖所有情况的正则表达式解析查询字符串:
/([^?=&;]+)(?:=([^&;]*))?/g
显然有一个关于如何检索查询字符串参数的非常流行的问题,但答案是不正确的(或者至少没有解决边缘情况)。
[更新] 我的选择基于@Bergi 和@zzzzBov 的回答:
http://server/site?lastname=Daniels => firstname: undefined
http://server/site?firstname&lastname=Daniels => firstname: true
http://server/site?firstname=&lastname=Daniels => firstname: ""
http://server/site?firstname=Jack&lastname=Daniels => firstname: "Jack"
一个副作用是我不得不稍微修改我的正则表达式,因为上面的规则=
需要捕获符号:
/([^?=&;]+)(=[^&;]*)?/g