查表法:
/**
* @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 字符串,稍微复杂一点就不行了。