2010-02-07 56 views
0

升级到jquery 1.4.1后,我发现有一个错误,我试着调用json.parse。这个问题是json中使用的正则表达式的一部分。它在与JQuery的$快捷方式冲突的模式中使用$。

我不想在jQuery中使用非冲突选项,因为我有很多地方我必须用新的更正的快捷方式替换$。

有没有办法在单引号或其他东西中包装正则表达式模式,所以模式字符串的字面意思是一个字符串?

破碎节JSON-2.0.js:(失败的$)

if (/^[\],:{}\s]*$/. 
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). 
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). 
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { 
..... 
} 

感谢

更新:

的问题并不像它似乎并没有得与$冲突。从OP:

的错误是在test.replace轰炸,因为这是在传递的对象已经被反序列化这样的方法replace没有被发现。我猜想升级到JQuery 1.4.1的结果对象在$.ajax函数的成功事件中被处理的方式发生了一些变化。

+1

你对此有多确定?看起来不太可能,因为美元在语法上与用作jQuery函数标识符的“$”不同。就像如果你有一个名为“foo”的变量,正则表达式/ foo /不会混淆。当你说它“失败”时,究竟发生了什么? – Pointy 2010-02-07 15:46:32

+0

当我回滚我的引用jquery jquery-1.3.2.js我没有这个问题。我检查过萤火虫和VS2008.net的js调试器。都认为模式中的$是JQuery对象。 – used2could 2010-02-07 15:48:47

+0

嗯,我已经用新库运行了我的大型jQuery负载网站,并且我有遍布整个地方的美元符号的正则表达式,而且我根本没有任何问题。Firebug告诉你什么,或者怎么做,让你认为它认为$ regex特殊字符实际上是jQuery对象? – Pointy 2010-02-07 15:51:06

回答

3

肯定它的失败在$,因为这个原因?因为这是一个巨大的命名空间/解析失败。所有JavaScript引擎都没有理由在这里寻找外部符号。它的已被封装在你问的方式(通过斜杠,这是一个正则表达式引用)。如果真的是这个问题,那么解释器会在一个字符串中萦绕$就会令人惊讶。我认为你的问题在别处。

0

错误被轰炸的test.replace的对象被传入已经被反序列化,所以没有找到方法replace。我猜想升级到JQuery 1.4.1的结果对象在$.ajax函数的成功事件中被处理的方式发生了一些变化。

这个问题应该被删除

显然,这个问题不能与已经提供的答案吧量被删除。

+0

我冒昧地将这个问题复制到问题本身。 (您可以编辑问题。) – 2010-02-08 06:02:04

+0

非常感谢T.J.! – used2could 2010-02-08 13:53:45