使用“json”类型修改文本中的一个值

时间:2015-08-18 07:12:34

标签: regex

我将以下值作为文本获取,我只需将APPLICATION_TEST app_name 中的值替换为 helloWorld 而不是 h10 ,如何才能我这样做?

文本文件包含许多属性,我只需要修改APPLICATION_TEST属性

APPLICATION_TEST='{\"instance_id\":\"78-bdc\",\"app_name\":\"h10\",\"started_at_timestamp\":\"14\",\"state_timestamp\":\"195\",\"host\":\"mo-d6fa32e73.mo.sap.corp\""app_uris\":[\"\"],\"uris\":[\"zo-\"]}'\r\nHOST.corp\r\n"

我尝试使用var app = /(APPLICATION_TEST=[^:]*):\d+/gi; 并希望在没有成功之后做出替换...任何想法

4 个答案:

答案 0 :(得分:3)

使用正则表达式将字符串匹配到必要的app_name值,将其捕获到组1中,然后使用$1在替换字符串中对其进行反向引用,然后使用所需的值代替之前的值:

document.write("<b>Old string from the original question</b>:<br/>");
var APPLICATION_TEST = "APPLICATION_TEST='{\"instance_id\":\"78-bdc\",\"app_name\":\"h10\",\"started_at_timestamp\":\"14\",\"state_timestamp\":\"195\",\"host\":\"mo-d6fa32e73.mo.sap.corp\"app_uris\":[\"\"],\"uris\":[\"zo-\"]}'\r\nHOST.corp\r\n";
var res = APPLICATION_TEST.replace(/(APPLICATION_TEST\s*=\s*'\s*\{[^{}]*"app_name"\s*:\s*")[^"]+/, '$1helloWorld');
document.write(res + "<br/><br/><b>Now comes the JSON-compliant string</b>:<br/>");

// Or, since the string you might have is actually a JSON string:
var s = '{"instance_id":"718-8fcf-546bb7b7cbdc","app_name":"hw10"}';
var obj = JSON.parse(s);
obj.app_name = "helloWorld";
s = JSON.stringify(obj);
document.write(s + "<br/><br/><b>A regex solution for the JSON-compliant string</b>:<br/>");

// Regex way
var s = '{"instance_id":"718-8fcf-546bb7b7cbdc","app_name":"hw10"}';
document.write(s.replace(/("app_name"\s*:\s*")[^"]+/, '$1helloWorld') + "<br/><br/><b>Or, if your string is something like you posted before...</b>:<br/>");

// Or if your string is in fact similar to the one you posted before:
var APPLICATION_TEST = "APPLICATION_TEST='{\"instance_id\":\"718-8fcf-546bb7b7cbdc\",\"app_name\":\"hw10\"}'";
document.write(APPLICATION_TEST.replace(/(APPLICATION_TEST\s*=\s*'\s*\{[^{}]*"app_name"\s*:\s*")[^"]+/, "$1helloWorld"));

答案 1 :(得分:2)

在将APPLICATION_TEST作为Json对象时使用APPLICATION_TEST.app_name= 'helloWorld';

&#13;
&#13;
var APPLICATION_TEST={"instance_id":"78-bdc", "app_name":"h10", "started_at_timestamp":"14", "state_timestamp":"195", "host":"mo-d6fa32e73.mo.sap.corp", "app_uris":[""], "uris":["zo-"]};
alert(APPLICATION_TEST.app_name);

APPLICATION_TEST.app_name= 'helloWorld';
alert(APPLICATION_TEST.app_name);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您只需使用javascript的replace功能

即可
APPLICATION_TEST = APPLICATION_TEST.replace('app_name','helloWorld');

JS FIDDLE

答案 3 :(得分:1)

您可以尝试使用此正则表达式:\b(APPLICATION_TEST)(=.*app_name\\":\\")(\w+)

然后替换为:$1$2helloWorld

不知道javascript但这似乎是合法的,因为我检查了 APPLICATION_TEST ,如果它与第一组存在,然后将第三个匹配组与helloWorld交换。如果你的名字包含其他字符,你可能需要调整它。

现场演示:regex101.com

编辑:由于JS不支持lookbehind,因此将lookbehind更改为普通组。
编辑v2:将边界更改为与2APPLICATION_TESTAPPLICATION_TEST12不匹配。 Regex101链接已更新