我有一个问题是使用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
答案 0 :(得分:1)
这个怎么样...... /\?([^#]*)/
?
您不必担心匹配“上一个”#
,因为锚点从第一个#
开始,因此即使有#
个{{1}}字符串,第一次出现后的任何内容都不是查询字符串的一部分。
答案 1 :(得分:0)
用户/\?([^#]*)/
作为DaveRandom回答,并记住URL编码您的变量。在将encodeURIComponent("value");
添加到您的网址之前使用?
。 ..你的网址中不能有两个{{1}}。
答案 2 :(得分:0)
在这里,这很有效....我只是在第一个?
和最后一个#
之间取得了所有内容,连接起来并在其上运行toQueryParams。也许这还不错?
修改同时将所有?&
替换为?
,以便所有参数都匹配...