JSFiddle - React, Tailwind, and code Playground
JavaScript
var regex = /([,{])|("(?:\\[\s\S]|[^"])*"|true|false|null|[0-9.eE+-]+)|((?:\/\/|#)[^\n]*)|(\/\*[\s\S]*?\*\/)/g;
var nextIsKey = false;
var nextIsReplaced = false;
var replaceKey = "aaa";
var replaceValue = '"Its works!"'; // заменяем строковым значением
var replacer = function( $0, $1, $2, $3, $4 ) {
if ( typeof $1 !== 'undefined' ) {
nextIsKey = true;
} else if ( typeof $2 !== 'undefined' ){
if ( nextIsReplaced ) {
nextIsKey = false;
nextIsReplaced = false;
return replaceValue;
};
if ( nextIsKey && $2 == '"'+replaceKey+'"' ) nextIsReplaced = true;
nextIsKey = false;
}
return $0; // не меняем ничего, если это не указано отдельно
}
var jComm = '//first line\n\
\n\
{"aaa": "qwerty",//00\n\
"bbb": 1234 //comment (not pure JSON syntax)\n\
,"ccc": true # alternative comment style\n\
,"dd\\"d":/*multiline\\" comm\\ent*/ /*comm2\\*/null,\n\
"ee//e": "example of any symbols in key including inactive comments",\n\
"jsonComm":/*is*/"data format",/*which contains*///comments\n\
"multiline1" /*: 1, //- example of multiline comments\n\
"multiline2": 2,\n\
"multiline3":= 1234,*/ :[36.8,false/*,34*/,\n\
"/**/",[1,2,3,4,[//56789\n\
5,6,[[/*0*/7,{"x":/*xx*/"x"}],8]],{}] ],\n\
"mayBeAnyStructure":{"a":1/**/,"b":2},\n\
"lineEnd\\\\" \n\
:"end"\n\
}//after json\n \n /*2*/ ';
console.log( jComm.replace( regex, replacer ) );