Angular 由一个bug说起之四:jsonEditor使用不当造成的bug

一:问题

项目中使用了一个JSON第三方库: GitHub - josdejong/jsoneditor: A web-based tool to view, edit, format, and validate JSON

当用户编辑JSON格式的数据,查找替换时:

用户的期望结果是:$$ 被替换为$$_text,但是实际结果是被替换为$_text

二:原因

第三方库源码中,替换部分并没有针对特殊替换模式作出处理:

Search.prototype.replace = function (input, replacement) {var options = this.$options;var re = this.$assembleRegExp(options);if (options.$isMultiLine)return replacement;if (!re)return;var match = re.exec(input);if (!match || match[0].length != input.length)return null;replacement = input.replace(re, replacement);……}

三:解决

提出pr针对此情况的replacement进行预处理:

{……replacement = input.replace(re, replacement.replace(/\$/g, "$$$$"));……}

测试如下:

{……const test = "$$";console.log(test.replace(test, "$$_text".replace(/\$/g, "$$$$")));……
}

四:特殊替换模式

JavaScript的字符替换有一些特殊的规则,替换字符串可以包括以下特殊替换模式,其中只有当 pattern 参数是一个 正则是$n  $<Name> 才可用。如果 pattern 是字符串,或者相应的捕获组在正则表达式中不存在,则该模式将被替换为一个字面量。如果该组存在但未匹配(因为它是一个分支的一部分),则将用空字符串替换它

针对$$之外的五种模式举例测试如下:

   {     ……// $&var str1 = "ptest0229";console.log(str1.replace('t', '$&T'));// $`var str2 = "ptest0229";console.log(str2.replace('t', '$`T'));// $'var str3 = "ptest0229";console.log(str3.replace('t', "$'T"));// $nvar str4 = "p4";var reg4 =/(^[a-z])(\d{1})/g;var res4 = str4.replace(reg4, "$1");console.log(res4);// $<Name>var str = "p0";var reg =/(?<NAME>(^[a-z]))(\d{1})/g;var res = str.replace(reg, "$<NAME>");console.log(res);……}

其中, $n中n设置为1,所以$1指的是正则表达式中第一组匹配的值:

$<Name>中Name指的是正则组的名字

结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/503321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用node写后端环境运行时报错Port 3000 is already in use

解决方法:关闭之前运行的3000端口,操作如下 1.WindowR输入cmd确定,打开命令面板 2.查看本机端口详情 netstat -ano|findstr "3000" 3.清除3000端口 taskkill -pid 41640 -f 最后再重新npm start即可,这里要看你自己项目中package.joson的启动命令是什…

代码随想录算法刷题训练营day29:LeetCode(491)递增子序列、LeetCode(46)全排列、LeetCode(47)全排列 II

代码随想录算法刷题训练营day29&#xff1a;LeetCode(491)递增子序列、LeetCode(46)全排列、LeetCode(47)全排列 II LeetCode(491)递增子序列 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; im…

1905_ARMv7-M的堆栈寄存器

1905_ARMv7-M的堆栈寄存器 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARMv7-M实现了2种堆栈&#xff0c;分别是MSP和PSP。复位的时候默认是MSP&#xff0c;而当前是哪种可以通过CONTROL.SPSEL寄存器的bit来查看。 SP寄存器的最低2bit&#xff0c;S…

XUbuntu22.04之解决:仓库xxx没有数字签名问题(二百一十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【脑切片图像分割】MATLAB 图像处理 源码

1. 简单图像处理 加载图像 Brain.jpg&#xff0c;使用直方图和颜色分割成区域这些区域有不同的颜色。 这是一个更高级的问题&#xff0c;有多个解决它的方法。 例如&#xff0c;您可以计算具有特定数字的图像的直方图&#xff08;例如 16 - 32&#xff09;&#xff0c;找到直方…

ROS2体系框架

文章目录 1.ROS2的系统架构2.ROS2的编码风格3.细谈初始化和资源释放4.细谈配置文件5.ROS2的一些命令6.ROS2的核心模块6.1 通信模块6.2 功能包6.3 分布式6.4 终端命令和rqt6.5 launch6.6 TF坐标变换6.7 可视化RVIZ 1.ROS2的系统架构 开发者的工作内容一般都在应用层&#xff0c;…

Environment 为什么可以通过@Autowired 依赖注入?

在日常开发中&#xff0c;我们可能会需要使用到Environment&#xff0c;获得环境变量的值。如何获取Environment呢&#xff0c;无非就三种方式 实现EnvironmentAware 接口的 setEnvironment方法&#xff0c;接收传入的Evironment通过ApplicationContext 的 getEnvironment 方法…

JVM原理-基础篇

Java虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;是运行Java应用程序的核心组件&#xff0c;它是一个抽象化的计算机系统模型&#xff0c;为Java字节码提供运行环境。JVM的主要功能包括&#xff1a;类加载机制、内存管理、垃圾回收、指令解释与执行、异常处理与安…

TRB爆仓分析,套利分析,行情判断!

毫无疑问昨日TRB又成为涨幅榜的明星&#xff0c;总结下来&#xff0c;多军赚麻&#xff0c;空头爆仓&#xff0c;套利爽歪歪&#xff01; 先说风险最小的套利情况&#xff0c;这里两种套利都能实现收益。 现货与永续合约的资金费率套利年化资金费率达到惊人的3285%——DeFi的…

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…

系统中文保存后显示问号该如何解决(java+Springboot)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

机器学习笔记 YOLOv9模型相关论文简读

一、YOLOv9简述 自 2015 年 Yolov1 推出以来,已经出现了多个版本。 基于Darknet的YOLOv2、YOLOv3和YOLOv4 YOLOv5 YOLOv8 基于 Ultralytics。 SCALED-YOLOv4 使用 Pytorch 而不是 Darknet。 YOLOR是YOLOv4的改进。 YOLOX是YOLOv3的改进。 YOLOv6专注于工业应用。 YOLOv7 来自 …