【发布时间】:2011-01-14 02:35:56
【问题描述】:
升级到 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函数的成功事件上处理结果对象的方式发生了一些变化。
【问题讨论】:
-
您有多确定这会发生?这似乎不太可能,因为美元在语法上与用作 jQuery 函数标识符的“$”不同。就像如果你有一个名为“foo”的变量,正则表达式 /foo/ 不会被混淆。当你说它“失败”时,究竟会发生什么?
-
当我回滚对 jquery jquery-1.3.2.js 的引用时,我没有这个问题。我已经检查了萤火虫和 VS2008.net 的 js 调试器。都认为模式中的 $ 是 JQuery 对象。
-
好吧,我已经使用新库运行了我的大型 jQuery 加载站点,并且我到处都有带有美元符号的正则表达式,我一点问题都没有。 Firebug 到底告诉了你什么,或者做了什么,让你认为它认为 $ 正则表达式的特殊字符实际上是 jQuery 对象?
-
当您说“json.parse”时,您的意思是“$.parseJSON()”还是使用其他 JSON 库?
-
@Pointy:我认为他/她正在使用 json-2.0.js。
标签: javascript jquery regex json