javascript - jQuery 中的正则表达式困惑 (1.5.2)

标签 javascript jquery regex json

在发出 jQuery AJAX 请求后,我收到“无效 JSON”。这个请求代码并不重要,所以我选择省略它。

我深入研究了 jQuery 库并删除了相关代码,这些代码汇总到下面的代码片段中。

那么,鉴于我的请求返回一个字符串“{'x':'1'}”,为什么在处理它的过程中,jQuery 返回“{'x'” :']'}"?

//regex values stripped from jQuery 1.5.2.
var data  = "{'x':'1'}";
var rvalidchars = /^[\],:{}\s]*$/;
var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;

//test the various stages of data.replace from the jQuery library
alert (data.replace(rvalidescape, "@")); // {'x':'1'}"
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]")); //{'x':']'}"
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, "")); //{'x':']'}"

您可以在 this JSFiddle 看到它

此外,还会发生以下转换:

'{x:12}' --> '{x:]}'
'{"x":"12"}' --> '{],]}'

我猜有人可以向我解释为什么正则表达式会这样做,但我也很好奇为什么 jQuery 会这样做。

任何帮助将不胜感激

最佳答案

从表面上看,jQuery 正在用“]”替换任何不是有效 JSON 标记的内容。有些内容,如 'null'、'true'、'false' 等可以不带引号插入。事实上,数字也可以!

您的 JSON 无效,因为您需要对值使用双引号。所以要么:

{"x": 1}

{"x": "1"}

应该可以工作。您复制的代码仍然会破坏这一点,但通过 jQuery.parseJSON() 抛出它对我来说效果很好。

关于javascript - jQuery 中的正则表达式困惑 (1.5.2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702935/

相关文章:

javascript - d3如何制作单个堆积柱形图

Java YouTube正则表达式获取视频ID和时间戳

javascript - 如何使 JavaScript 'getElementById' 在 HTML CSS 切换开关上工作

javascript - Stripe 结帐 css 内容策略错误

javascript - 尽管打开了意图,discord.js 'guildMemberAdd' 事件仍不起作用

javascript - 当您只知道 <tr> 时如何提取 <td> 的值

javascript - 如何使用 HTML/JS 实现 'human' 日期范围选择下拉列表? (今天、昨天、上周……)

javascript - 如何使用 jQuery 获取开瓶器的元素?

c++ - 是否可以将宏的参数视为正则表达式?

regex - 在数字前后添加字符的正则表达式