我有这样一个无效的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]
-1
或2
"
-双引号\s*:\s*
-0+个空格,:
,以及0+空格[\s\S]*?
-直到第一个字符为止的任何0+个字符",
-双引号和逗号。