2011-08-23 44 views
1

我有一个问题,使用从protoypejs框架如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在我将它发送到服务器之前转义它的值。

我试图改变函数的正则表达式,只匹配第一个字符?和最新的#,我已经有一个表达式/(\?.*#)/这会对我有效,但我甚至想排除?和#,我希望你们中有人能帮助我:)

btw。下面该网页是要命实时构建正则表达式:P http://regexpal.com/

更新:感谢DaveRandom :) 对于那些谁想要解决这个问题,直接在framwork替换以下符合:

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

回答

1

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

因为锚开始于第一#,因此即使在字符串中不止一个#你不应该需要担心匹配到“最后” #,第一次出现后,你有什么不太部分的查询字符串。

+0

我不知道,但它似乎没有工作,要么:http://jsfiddle.net/pimvdb/rWE62 /。原型似乎在最后一个'?'后面读取所有内容。 – pimvdb

+1

您必须对您的变量进行编码。使用encodeURIComponent(“value”);然后将其添加到您的网址。 –

+0

上面的作品对我来说(给我'?a = lol&b = lal&c = laoa?&d = fehw'这是需要的,不是吗?),但要注意字符串仍然有第一个'?'它,我认为这是不可避免的(尽管我可能是错的,如果他们知道的话,请纠正我)。你总是可以将substr()第一个'?'关闭。 – DaveRandom

0

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

+0

第二场比赛不包括?和# – Maertz

0

在这里,这工作....我只是采取了第一个?和最后#之间的所有内容,连接并运行到它上面的QueryParams。也许这足够好?

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

编辑也全部换成?&?因此,所有参数都匹配...

+0

不,我不想丢失任何数据,在我的情况下,替换是不好的 – Maertz