在实际项目开发中,经常会遇到需要替换字符串的情况,简单的使用replace替换指定的一种字符串相信处理起来基本都没啥问题,但遇到一些比较复杂的替换字符串的场景如:需要替换多个不同的字符串,每次正则匹配出来后都要替换成不同的字符串,处理起来实现思路可能就会有些困惑!

实战应用场景:
拿到一后端转义过的字符串,需要将该字符串转换成JSON格式再做后续的业务处理,该字符串格式结构如下:

{"app_params":"{ \"aid\": 6666 }"}

试错做法:

var str = '{"app_params":"{ \"aid\": 6666 }"}';
    var strToJson=JSON.parse(str);
    console.log(strToJson);

然后就看到了最不想看到的红色报错:

VM86:1 Uncaught SyntaxError: Unexpected token a in JSON at ​position 18 at JSON.parse ()

大致意思是说遇到非预期的语法错误:意外的标记,导致JSON.parse执行失败,直白点说就是提供的字符串不符合标准的JSON格式,无法按预期转换为JSON输出。

分析下字符串:
\" 该转义字符串会自动替换输出",即原始字符串实际是这样的:

{"app_params":"{ "aid": 6666 }"}

单击展开代码,方便阅读

要能正常转换成JSON,在转换前必须将字符串替换处理为:

{"app_params":{ "aid": 9442 }}

单击展开代码,方便阅读

即需要替换2种字符:"{=>{ 和 }"=>},实现代码如下:

var str='{"app_params":"{ \"aid\": 6666 }"}';
    str = str.replace(/"\{/g, '{');
    str = str.replace(/"\}/g, '}');
    console.log(`替换后字符串:${str}`);
    strToJson = JSON.parse(str);
    console.dir(`转JSON后: ${strToJson}`);

多次调用replace正则替换看上去没啥毛病,但若遇到需要替换更多个不同字符串的时候,随着使用replace个数的添加,你会觉得这样的代码显得累赘,不够优雅,不够“高大上”!!
强迫症都出来了,不能忍!!!
replace同时正则匹配替换多个不同字符串,改造后的写法:

var str = '{"app_params":"{ \"aid\": 6666 }"}';
    console.log(`原始字符串:${str}`);
    str = str.replace(/("\{|"\})/gi, function (matchStr, p1) {
        console.log(`当前匹配到的子字符串:${p1}`)
        // 将正则匹配到的子字符串作为索引key,返回对象字面量value(该value为要替换后的字符串)
        return {
            '"{': '{',
            '"}': '}',
        }[p1] //
    })
    console.log(`替换后字符串:${str}`);
    strToJson = JSON.parse(str);
    console.dir(`转JSON后: ${strToJson}`);

注意看注释,有没一种豁然开朗的感觉!

js replace正则匹配替换多个不同字符串的实现方法相关推荐

  1. js正则匹配替换,一对闭合html标签

    let str = `<div><h1>正则测试</h1><p class=""><style>.icon{width: ...

  2. html正则表达式怎么写用户名非空,js通过正则匹配没有内容的空标签

    js 如何正则匹配没有内容的空标签并移除掉? 例如 等等 正则 /]*?)?>\s*?/ig html=' '+ '\n '+ '\n'+ '\n '+ '\n '+ '\n '+ '\n'+ ...

  3. 正则匹配数字和字母php,用php与js实现正则匹配数字和字母组合的密码

    这次给大家带来用php与js实现正则匹配数字和字母组合的密码,用php与js实现正则匹配数字和字母组合密码的注意事项有哪些,下面就是实战案例,一起来看一下. 本文实例讲述了正则匹配密码只能是数字和字母 ...

  4. JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式

    JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式 .match(/{[^}{]*?}/g)

  5. 使用Python 正则匹配两个特定字符之间的字符方法

    string = "<KeysViewHDF5 ['Inoisy']>" import redef cut_out(a,b,string):result = re.fi ...

  6. php正则判断数字和英文,PHP正则匹配中英文、数字及下划线的方法【用户名验证】...

    本文实例讲述了PHP正则匹配中英文.数字及下划线的方法.分享给大家供大家参考,具体如下: 一.问题: 对于用户注册时的用户名要求由中英文.数字或下划线组成,不得含有其他字符. 二.解决方法: 针对输入 ...

  7. php 正则匹配是否存在字符,php正则匹配不包含某个字符有什么实现方法

    php正则匹配不包含某个字符有什么实现方法 发布时间:2020-08-10 10:34:58 来源:亿速云 阅读:75 作者:Leah 这期内容当中小编将会给大家带来有关php正则匹配不包含某个字符有 ...

  8. JS_js正则匹配替换冒号,RegExp 对象

    RegExp 对象 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. var patt=new RegExp(pattern,modifi ...

  9. php正则匹配标点符号,js实现正则匹配中文标点符号的方法

    本文实例讲述了js正则匹配中文标点符号的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: js正则匹配中文标点符号 function checkText() { var te ...

最新文章

  1. HarmonyOS UI开发 match_parent与match_content
  2. C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?
  3. [HAOI2018]染色
  4. linux6.5安装打印机,如何在CentOS 6.5下安装Win7下的共享打印机服务
  5. 程序员面试金典适合java么,【程序员面试金典】面试题 01.03. URL化(示例代码)
  6. '固定' table宽度,走起!
  7. 怎么在前台取的ViewBag中的值
  8. Cowrie蜜罐的部署(ubt亲测)
  9. ireport怎么生成jasper文件
  10. JSADS-日志对象MyLogger
  11. Qt5.12 安装教程windows
  12. 杭州互联网公司和生活成本
  13. 火狐浏览器的一些插件
  14. 一个由“2020年1月7日 京东出现的重大 Bug 漏洞“引起的思考......
  15. Mybatis事务隔离级别
  16. 面对互联网寒冬裁员潮,HR都在干什么?
  17. DIY 手动制作自己的win pe
  18. 添加metadata到tflite模型
  19. wordpress的excerpt()函数
  20. python redis连接_Python连接Redis连接配置

热门文章

  1. web前端学习(十八)——CSS3表格属性(table)的相关设置
  2. python爬虫爬取商城男装信息
  3. 打散线条lisp_cad打散多重插入块的方法
  4. 【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件
  5. iphone表白小技巧计算机,自言 - 毕业表白,用这个神器最合适了 - iPhone应用 - iPad - 【最美应用】...
  6. 计算机图形技术与CAD,《计算机图形学与CAD技术》考试参考资料.docx
  7. # 22.Flink-高级特性-新特性-异步IO\原理
  8. 【BCT_RFC6762】 多播DNS
  9. 家用洗地机哪个好用?家用洗地机分享
  10. 计算机论文校外指导教师意见,毕业论文开题报告指导教师意见参考(通用5篇)...