我有这样一个无效的json字符串:

[{
        "itemID": "1",
        "itemTitle": "Mango",
        "itemText": "some text here"again text",
        "ThumbUrl": "http://someurl.com/mango.jpg",
        "itemContent": null
    }, {
        "itemID": "2",
        "itemTitle": "orange",
        "itemText": "someother text " again another texther",
        "ThumbUrl": "http://someurl.com/orange.jpg",
        "itemContent": null
    }

]


javascript:

$.get("http://www.someapiurl.com/getdata.php", function(data, status){

//here i want to replace json key value to empty before parsing the json
     var json = $.parseJSON(data);

}


我想使用正则表达式将itemText的值更改为空。有人可以帮助我如何使用正则表达式实现这一目标吗?

注意:

-JSON无效(这是我获取它的方式,因此我必须在解析它之前对其进行更正

-Json响应有时在itemText中用双引号引起来)

-itemText键值跨越多行(unicode和非unicode的混合)和long(不在在线行)

编辑:我已经使用此php正则表达式来达到相同的目的。你们可以帮我将其转换为javascript常规表达式吗?

print_r(preg_replace('/\"itemText\"\:\".*?\"\,/s', '"textTitle$1":"empty",',$json));


编辑2:
最后,在所有情况下,我用空的单词替换了itemText:

 data.replace(/("itemText"\s*:\s*")[\s\S]*?ThumbUrl/g, '$1empty","ThumbUrl')

最佳答案

正确的方法是要求您的数据提供商从侧面解决问题。

作为临时的解决方法,您可以使用

.replace(/("itemText[12]"\s*:\s*")[\s\S]*?",/g, '$1empty"')


请参见regex demo



var regex = /("itemText[12]"\s*:\s*")[\s\S]*?",/g;
var str = `[{
        "itemID": "1",
        "itemTitle": "Mango",
        "itemText1": "some text here"again text",
        "ThumbUrl": "http://someurl.com/mango.jpg",
        "itemContent": null
    }, {
        "itemID": "2",
        "itemTitle": "orange",
        "itemText2": "someother text " again another texther",
        "ThumbUrl": "http://someurl.com/orange.jpg",
        "itemContent": null
    }

]`;
var subst = '$1empty"';
var result = str.replace(regex, subst);
console.log(result);





细节:


("itemText[12]"\s*:\s*")-组1捕获


"itemText-文字"itemText
[12]-12
"-双引号
\s*:\s*-0+个空格,:,以及0+空格

[\s\S]*?-直到第一个字符为止的任何0+个字符
",-双引号和逗号。

10-05 22:28