当前位置: 首页 > 知识库问答 >
问题:

javascript - js正则多次替换有没有优雅的写法?

欧阳正谊
2023-10-06

这段代码用来规范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 );

共有1个答案

包翔
2023-10-06

查表法:

/** * @function groupReplace * @param {string} str * @param {Map<RegExp|string, string>} 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 字符串,稍微复杂一点就不行了。

 类似资料:
  • 问题内容: 我有这个字符串: 正在做: 似乎只删除了上面字符串中的第一个匹配项。 如何替换 所有 出现的内容? 问题答案: 注意:请勿在对性能有要求的代码中使用此代码。 作为简单文字字符串的正则表达式的替代方法,您可以使用 一般模式是 在某些情况下,它过去比使用和正则表达式要快,但是在现代浏览器中,情况似乎不再如此。 结论:如果您有性能至关重要的用例(例如,处理数百个字符串),请使用Regexp方

  • 大写字母、小写字母、纯数字、特殊符号。四种至少任意三种组合,长度不低于8位。 特殊符号:! @ . - _(以上五种符号都是英文状态下) 以下是我的正则 如果没写对那因该咋写 如果有写对还能优化吗

  • 在 Go 语言中,可以使用 append 函数来合并多个数组。例如,如果你有两个整数数组 a 和 b,可以这样合并它们: 这样,c 就是一个新的数组,它包含了 a 和 b 中的所有元素。注意,在调用 append 函数时,第二个参数后面要加上 ...,表示将第二个数组中的元素展开。 如果你有多个数组需要合并,可以重复调用 append 函数。例如: 这样,d 就是一个新的数组,它包含了 a、b 和

  • 我有一个字符串,可以是下面任何一种情况: < li >测试1/测试2/测试3/测试4/测试5/ < li >测试1/测试2/测试3/测试4// < li >测试1/测试2/测试3/// < li >测试1/测试2//// < li>test1///// 我的预期结果是 > < li >测试1/测试2/测试3/测试4/测试5 < li> 测试1/测试2/测试3/测试4 测试1/测试2/测试3 目前,

  • 问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API​​的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。

  • Parameter Position参数位置 Type类型 Required必需 Default默认 Description 1 string Yes n/a This is the regular expression to be replaced. 替换正则表达式. 2 string Yes n/a This is the string of text to replace with. 用来替