我将以下值作为文本获取,我只需将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;
并希望在没有成功之后做出替换...任何想法
答案 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';
。
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;
答案 2 :(得分:1)
您只需使用javascript的replace
功能
APPLICATION_TEST = APPLICATION_TEST.replace('app_name','helloWorld');
答案 3 :(得分:1)
您可以尝试使用此正则表达式:\b(APPLICATION_TEST)(=.*app_name\\":\\")(\w+)
然后替换为:$1$2helloWorld
不知道javascript但这似乎是合法的,因为我检查了 APPLICATION_TEST ,如果它与第一组存在,然后将第三个匹配组与helloWorld
交换。如果你的名字包含其他字符,你可能需要调整它。
现场演示:regex101.com
编辑:由于JS不支持lookbehind,因此将lookbehind更改为普通组。2APPLICATION_TEST
或APPLICATION_TEST12
不匹配。 Regex101链接已更新