从URL获取整个查询

时间:2011-08-23 11:54:10

标签: javascript hash prototypejs

我有一个问题是使用protoypejs框架e.G中的toQueryParams函数从url获取整个查询:

var a = "http://anypage.com?a=lol&b=lal&c=laoa?&d=fehw#lalalalalSomeAnchor";

a.toQueryParams();

>> {d: 'fehw'}

what i want to get:

>> {a: 'lol', b: 'lal', c: 'loaa?', d: 'fehw'}

我知道url无效但我想在我将其发送到服务器之前预处理该url以逃避其值。

我尝试更改函数正则表达式,以匹配第一个之间的字符?和最新的#,我已经有一个表达式/(\?.*#)/这对我有用,但我甚至想排除?和#,我希望有人可以帮助我:))

顺便说一句。以下页面实时构建正则表达式非常棒:P http://regexpal.com/

更新:感谢DaveRandom :) 对于那些想直接在框架中修复它的人来说,替换以下行:

L625: var match = this.strip().match(/\?([^#]*)/); // (/([^?#]*)(#.*)?$/); default

3 个答案:

答案 0 :(得分:1)

这个怎么样...... /\?([^#]*)/

您不必担心匹配“上一个”#,因为锚点从第一个#开始,因此即使有#个{{1}}字符串,第一次出现后的任何内容都不是查询字符串的一部分。

答案 1 :(得分:0)

用户/\?([^#]*)/作为DaveRandom回答,并记住URL编码您的变量。在将encodeURIComponent("value");添加到您的网址之前使用?。 ..你的网址中不能有两个{{1}}。

答案 2 :(得分:0)

在这里,这很有效....我只是在第一个?和最后一个#之间取得了所有内容,连接起来并在其上运行toQueryParams。也许这还不错?

http://jsfiddle.net/cQYV7/1/

修改同时将所有?&替换为?,以便所有参数都匹配...