Javascript jQuery'中的正则表达式测试;解析JSON返回false-为什么?

Javascript jQuery'中的正则表达式测试;解析JSON返回false-为什么?,javascript,jquery,regex,json,Javascript,Jquery,Regex,Json,我不明白为什么要在jQuery的parseJSON函数中进行测试: /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g,

我不明白为什么要在jQuery的parseJSON函数中进行测试:

/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
            .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))
返回字符串的
false
{“TermTitle”:“某些标题”}

中的测试告诉我字符串
{“TermTitle”:“some Title”}
是有效的JSON,但当我尝试将其传递到
$.parseJSON(opData)
时,
parseJSON
函数失败…
我还用提到的字符串在Firebug中单独测试了这个
/^[\],:{}\s]*$/.test…
函数

[编辑] 好的,代码:

var json = '{"TermTitle":"some Title"}';  
var obj = $.parseJSON(json);  
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);
对我也有用

但在我的JavaScript中有以下内容:

function GetTerm($iInd) {  
    $.ajax({  
        type: "POST",  
        url: "get_term.php",  
        data: {  
            id: $iInd  
        },  
        success: function(data){  
            ProcessFetchedTerm(data);  
        }  
    });  
    //If I tried adding dataType: "json" then it would stop working at all.
}  

function ProcessFetchedTerm(opData) {  
    alert ("In ProcessFetchedTerm, data: '" + opData + "'");  
    alert ("typeof opData: " + typeof opData);  

    alert ("Replacement result of the regex function: " +  
      opData.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").  
          replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").  
          replace(/(?:^|:|,)(?:\s*\[)+/g, ''));  

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

    var oTerm = $.parseJSON(opData);  
    alert('oTerm = ' + oTerm + ' and oTerm.TermTitle = ' + oTerm.TermTitle);  
}  
get_term.php
中,我有:

echo json_encode(  
    array(  
        "TermTitle"=>"some Title"  
    )  
);  
警报返回:
在ProcessFetchedTerm中,数据:“{”TermTitle:“some Title”}”

操作数据类型:字符串

正则表达式函数的替换结果:{]:]}

正则表达式函数的结果:false

最后一个警报未显示

[编辑2]

我将函数
ProcessFetchedTerm
的开头重写为

function ProcessFetchedTerm(opData) {  

    var json = '{"TermTitle":"some Title"}';  
    alert ("In ProcessFetchedTerm, opData: '" + opData + "' json: '" + json + "'");  

    var oTerm = $.parseJSON(json);  
警报指出:

In ProcessFetchedTerm, opData: '{"TermTitle":"some Title"}' json: '{"TermTitle":"some Title"}'  
因此字符串是相等的,如果下一行是
var oTerm=$.parseJSON(json)它可以工作,但如果下一行是
var oTerm=$.parseJSON(opData)它不工作

那么,在这个(大概是)字符串对象
opData
中隐藏了什么会阻止它工作呢?

运行此代码:

var json = '{"TermTitle":"some Title"}';
var obj = $.parseJSON(json);
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);
适合我(使用jquery1.4)。问题一定在代码的其他地方。当parseJSON方法失败时,您正在运行的确切代码是什么

编辑(对发布代码的响应): 为什么要使用第三和第四警报的功能?我猜这会改变你的
opData
值。尝试在调用
parseJSON
之前添加第一个警报,并查看其内容。

它返回“false”,因为它不匹配。“replace”调用将该JSON字符串转换为与正则表达式不匹配的“{]:]}”


[编辑]哦,是的,它确实匹配;我不知道你有什么问题。为什么您认为它会返回“false”?

ProcessFetchedTerm输出中的警报是什么?添加了警报输出以解决问题…还有一些事情需要尝试:
警报(opData==json)。我认为这是错误的,因为他们似乎不平等。另外,尝试替换
$.parseJSON(opData)使用
eval(opData)
。这应该做同样的事情,如果它能工作,那就意味着jQuery有问题。要进行eval测试,您必须这样做:
eval(“(“+opData+”)”)
Yes with
eval
它能工作。而
警报(opData==json)
返回false。我仍将努力找出为什么正则表达式没有按预期工作……我也在考虑这个问题(移动第三和第四警报)。但它还是失败了。
parseJSON
函数抛出
无效的JSON:{“TermTitle”:“some Title”}“
错误。我还尝试将“您的”代码添加到同一个函数
ProcessFetchedTerm
中,它可以工作,但是使用
opData
中的值,它就不工作了。也许这可能与编码问题有关…?我想可能是编码问题,但我不知道会是什么。当您收到
“Invalid JSON”
错误时,我会尝试调试它,并尝试查找我的代码中
JSON
变量的值与代码中
opData
的值之间的差异。。。