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.pswp.cn/news/714852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[物聯網] OneNet 多協議TCP透傳

[物聯網] OneNet 多協議TCP透傳 STM32物聯網–ONENET云平臺的多協議接入產品創建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透傳 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服務端測試工具 : http://tcp.xnkiot.com/…

zephyr學習

zephyr內核對象學習 定時器 類似linux的定時器&#xff0c; 可以分別設置第一次到期時間和后續的周期觸發時間&#xff0c; 可以注冊到期回調和停止回調 還有一個計數狀態&#xff0c;用于標記timer到期了多少次 duration&#xff1a;設定timer第一次到期的時間。 period: …

SpringBoot3.2.0整合MyBatis-plus的相關問題及處理方法

SpringBoot3.2.0整合MyBatis-plus的相關問題 文章目錄 SpringBoot3.2.0整合MyBatis-plus的相關問題1. build.gradle2. mybatis-plus整合問題1. 錯誤描述2. 問題分析及解決1. 原因分析2. 解決方式 Springboot3.2.0 GA版發布于 2023-11-24 環境&#xff1a;SpringBoot3.2.0Gradle…

【蛀牙】日常生活如何正確護理牙齒?刷牙、洗牙、補牙

程序員生活指南之 【蛀牙】日常生活如何正確護理牙齒&#xff1f;刷牙、洗牙、補牙 文章目錄 一、日常如何清洗牙齒&#xff1f;——刷牙與洗牙1、牙齒污垢1.1 牙菌斑1.2 軟垢1.3 牙結石1.4 牙齦出血 2、如何刷牙2.1 關于時間2.2 各種工具2.3 巴氏刷牙法 二、定期進行洗牙3、如…

題目 1076: 內部收益率

題目描述: 在金融中&#xff0c;我們有時會用內部收益率IRR來評價項目的投資財務效益&#xff0c;它等于使得投資凈現值NPV等于0的貼現率。換句話說&#xff0c;給定項目的期數T、初始現金流CF0和項目各期的現金流CF1, CF2, ...&#xff0c;CFT&#xff0c;IRR是下面方程的解&…

RISC-V特權架構 - 特權模式與指令

RV32/64 特權架構 - 特權模式與指令 1 特權模式2 特權指令2.1 mret&#xff08;從機器模式返回到先前的模式&#xff09;2.2 sret&#xff08;從監管模式返回到先前的模式&#xff09;2.3 wfi&#xff08;等待中斷&#xff09;2.4 sfence.vma&#xff08;內存屏障&#xff09; …

SpringBoot+Vue+MySQL:裝修管理新架構探索

??計算機畢業編程指導師 ??個人介紹&#xff1a;自己非常喜歡研究技術問題&#xff01;專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目&#xff1a;有源碼或者技術上的問題歡迎在評論區一起討論交流&#xff01; ?? Java、…

FPGA開源項目分享——2D N-Body重力模擬器

?導語 今天繼續康奈爾大學FPGA 課程ECE 5760的典型案例分享——2D N-Body重力模擬器。 &#xff08;更多其他案例請參考網站&#xff1a; Final Projects ECE 5760&#xff09; 1. 項目概述 項目網址 Grav Sim 項目說明 該項目的目標是創建一個用DE1-SOC進行硬件加速的2…

Java面試技巧

一、面試前準備 復習基礎知識&#xff1a;深入理解Java核心概念&#xff0c;如JVM、JDK、JRE等。熟悉Java基本語法、面向對象編程、異常處理、集合類、IO流等。同時&#xff0c;對Java的新特性&#xff0c;如Lambda表達式、Stream API等也要有所了解。強化算法和數據結構&…

簡易內存池2 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 200分 題解&#xff1a; Java / Python / C 題目描述 請實現一個簡易內存池,根據請求命令完成內存分配和釋放。 內存池支持兩種操作命令&#xff0c;REQUEST和RELEASE&#xff0c;其格式為: REQUEST請求的內存大小 …

Redis 【1】—— 安裝 與 配置

Redis 【1】—— 安裝 與 配置 一、安裝 與 配置&#xff08;一&#xff09;使用 yum 安裝&#xff08;二&#xff09;創建符號鏈接1. 軟鏈接2. 相關指令 &#xff08;三&#xff09;修改配置文件&#xff08;四&#xff09;Redis 的啟停 一、安裝 與 配置 &#xff08;一&…

Java的強引用、軟引用、弱引用和虛引用詳解。

Java的強引用、軟引用、弱引用和虛引用 1. 強引用2. 軟引用3. 弱引用4. 虛引用 總結 Java的強引用、軟引用、弱引用和虛引用可以用來標識GC時判斷對象是否達到回收的條件&#xff0c;下面結合Java代碼看看這四類引用吧。 1. 強引用 是最普通的引用方式&#xff0c;通過new關鍵…

外貿業務員沒客戶的7大原因+解決辦法!

業務員沒有客戶&#xff0c;就是無源之水&#xff0c;無本之木&#xff0c;這自然也就沒有業績。那些吃空餉的業務員&#xff0c;遲早會拖垮公司。所以不管是什么原因導致的業務員沒客戶&#xff0c;都要一一查驗清楚。七個業務員沒有客戶的原因&#xff0c;七種對策&#xff0…

華為數通方向HCIP-DataCom H12-821題庫(多選題:21-40)

第21題 管理員在配置 VRRP 時,下面哪些不是必須配置的? A.搶占模式 B.搶占延時 C.虛擬IP 地址 D.虛擬路由器的優先級 【參考答案】ABD 【答案解析】 VRRP的作用之一是提供一個虛擬的IP地址,用作默認網關,用來實現冗余和故障轉移。因此,配置虛擬IP地址是必須的。華為設備vr…

hcip交換

交換機功能 無限的傳輸距離——識別&#xff0c;重寫電信號&#xff08;幀&#xff09;保證信息完整徹底解決了沖突二層單播——MAC地址表提高端口密度 單播地址&#xff1a;MAC地址第一個字節第8位為0 組播地址&#xff1a;MAC地址第一個字節第8位為1 廣播地址&#xff1a;全1…

滲透測試靶場環境搭建

1.DVWA靶場 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用&#xff0c;包含了OWASP TOP10的所有攻擊漏洞的練習環境&#xff0c;旨在為安全專業人員測試自己的專業技能和工具提供合法的環境&#xff0c;同時…

Mybatis批量更新對象數據的兩種方法

說明&#xff1a;遇到一次需要批量修改對象的場景。傳遞一個對象集合&#xff0c;需要根據對象ID批量修改數據庫數據&#xff0c;使用的是MyBatis框架。查了一些資料&#xff0c;總結出兩種實現方式。 創建Demo 首先&#xff0c;創建一個簡單的Demo&#xff1b; &#xff08…

SpringBoot+Jwt+Redis

大致流程&#xff1a; 參照&#xff1a; 史上最全面的基于JWT token登陸驗證_完整的基于jwt的登陸認證-CSDN博客 springboot整合JWTRedis_springboot jwt redis-CSDN博客

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:浮層)

設置組件的遮罩文本。 說明&#xff1a; 從API Version 7開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 overlay overlay(value: string | CustomBuilder, options?: { align?: Alignment; offset?: { x?: number; y?: number } })…

劍指offer面試題28:對稱的二叉樹

#試題28&#xff1a;對稱的二叉樹 題目&#xff1a; 請設計一個函數判斷一棵二叉樹是否 軸對稱 。 示例 1&#xff1a; 輸入&#xff1a;root [6,7,7,8,9,9,8] 輸出&#xff1a;true 解釋&#xff1a;從圖中可看出樹是軸對稱的。示例 2&#xff1a; 輸入&#xff1a;root …