【问题标题】:Fix JQuery-1.4.1 and json-2.0 conflict in json.parse regex conflict with "$" character修复 json.parse 中的 JQuery-1.4.1 和 json-2.0 冲突与“$”字符冲突
【发布时间】: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


【解决方案1】:

确定它在$ 上失败了,是因为这个原因吗?因为如果是这样,那将是一个巨大的命名空间/解析失败。 JavaScript 引擎完全没有理由在那里寻找外部符号。它已经以您询问的方式封装(通过斜杠,它实际上是正则表达式的引号)。如果这真的是问题所在,那将与解释器在字符串中的 $ 窒息一样令人惊讶。我认为您的问题出在其他地方。

【讨论】:

    【解决方案2】:

    这是一个引入 jQuery 1.4.1 和 json2.js 的页面,它调用 JSON.parse(),它没有异常或错误:http://gutfullofbeer.net/json.html

    【讨论】:

      【解决方案3】:

      错误是对test.replace 进行轰炸,传入的对象已经反序列化,因此找不到方法replace。我猜想升级到 JQuery 1.4.1 在$.ajax 函数的成功事件上处理结果对象的方式发生了一些变化。

      这个问题应该被删除

      显然这个问题不能用已经建议的答案数量来删除。

      【讨论】:

      • 我冒昧地将其复制到问题本身。 (您可以编辑问题。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多