js正则多次替换有没有优雅的写法?-灵析社区

复古直男

这段代码用来规范json字符串,有没有优雅的写法? var gLoginQstr = '{firstname: jack, lastname: li, age: 30}'; gLoginQstr = gLoginQstr.replace("{", "{\""); gLoginQstr = gLoginQstr.replace(/:/g, "\":\""); gLoginQstr = gLoginQstr.replace(/,/g, "\",\""); gLoginQstr = gLoginQstr.replace("}", "\"}"); console.log(gLoginQstr );

阅读量:15

点赞量:0

问AI
查表法: /** * @function groupReplace * @param {string} str * @param {Map} map * */ function groupReplace(map, str){ let result = str; map.forEach(function(key, val){ result = result.replace(key, val); }); return result; } console.log(groupReplace( '{firstname: jack, lastname: li, age: 30}', new Map([ [/\{ */, "{\""], [/: */g, "\":\""], [/, */g, "\",\""], [/\} */, "\"}"] ]) )) 分组正则匹配法: gLoginQstr = gLoginQstr.replaceAll(/(\{ *)|(: *)|(, *)|(\} *)/g, (_, $1, $2, $3, $4) => { if($1 !== undefined) return "{\""; if($2 !== undefined) return "\":\""; if($3 !== undefined) return "\",\""; if($4 !== undefined) return "\"}"; return "" }); 正则里面加的" *"是为了去除目标值前面的空格,否则""jack""会变成"" jack""。 但是这样的写法显然只能处理最简单的 JSONLike 字符串,稍微复杂一点就不行了。