正則表達式結合自定義function使用replace

replace使用正則表達式和function替換
js代碼

html代碼

場景描述
輸入不同數量的人名,根據不同的人數打印不同的描述

代碼分析
首先在js代碼中使用templates定義了5個模板,通過 var idx = Math.min(names.length, 4)根據人數獲取對應的模板的索引,通過 return templates[idx].replace(/{name}|{others}/g, function(val){ console.log(val) return val === ‘{name}’?names.shift():names.length })替換模板對應的位置,輸出結果

首先在對應位置打斷點進行調試

分別在9、11、12三個位置打上了斷點,運行console.log(likes([‘John’]))時獲取的idx為1,即使用模板一,通過正則表達式/{name}|{others}/g去匹配對應的數據,其中|代表或者,代表全局替換

當到達11時打印val

劃重點:可見val就是需要匹配的字段

由此說明,當使用正則表達式且replace第二個參數為function時,function的接收的參數就是需要匹配的字段,并且將由function的返回值替換匹配的字段,就可以通過判斷val的值進行不同的操作

其中return val === ‘{name}’?names.shift():names.length這段代碼的細節之處在于,可以通過names下標去返回需要替換的值,但是這樣做的話在替換others時就需要進行減法運算,但是如果使用shift(),就不需要進行減法操作了,names.shift() 正則順序是吻合的,直接完美契合!因為shift()的功能是刪除并返回數組的第一個元素。

下圖為運行到console.log(likes([‘John’, ‘Jane’, ‘Andrew’, ‘Jennifer’]))時的數據,由于shift()已經將前兩個數據彈出數組,所以數組的長度完全符合,直接獲取就可以了

總結
replace()方法結合正則表達式,通過自定義的回調函數,可以實現各種復雜的字符串處理需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37094.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37094.shtml

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

相關文章

tqdm庫教程 - 進度條可視化利器

tqdm庫教程 - 進度條可視化利器 1. 什么是tqdm?2. tqdm的基本用法3. tqdm的高級用法3.1 自定義描述3.2 手動更新進度條3.3 在文件處理中使用tqdm 4. tqdm的其他特性4.1 嵌套進度條4.2 在Jupyter Notebook中使用 5. 總結 1. 什么是tqdm? tqdm是一個Python庫,用于在循環或長時…

揭秘多年免費聽音樂、直播、影視的自用方案:手機、電視、電腦多平臺0成本實現媒體自由(內含相關資源)

文章目錄 ?? 介紹 ???? 演示環境 ???? 多媒體自由 ???? 音樂資源??安卓平臺?? 蘋果平臺?? PC平臺?? 影視資源?? 安卓平臺?? 蘋果平臺?? 電視盒子?? PC平臺?? 電影下載?? 直播資源?? 手機平臺?? PC平臺?? 電視盒子?? 相關鏈接 ???…

秋招力扣刷題——數據流的中位數

一、題目要求 中位數是有序整數列表中的中間值。如果列表的大小是偶數,則沒有中間值,中位數是兩個中間值的平均值。 例如 arr [2,3,4] 的中位數是 3 。 例如 arr [2,3] 的中位數是 (2 3) / 2 2.5 。 實現 MedianFinder 類: MedianFinder() 初始化 …

ISS檢測原理

ISS(Intrinsic Shape Signatures)是由Yu Zhong于2009年提出的一種三維形狀描述子,用于描述局部或半局部區域的點云,局部區域可以理解為以一個點云中某點為球心,以一定半徑構成的可以包含多個內點的球形區域,半局部則是半個球形區域。ISS可用于不同視角點云的配準、快速姿…

大數據面試題之Spark(4)

目錄 RDD的容錯 Executor內存分配? Spark的batchsize,怎么解決小文件合并問題? Spark參數(性能)調優 介紹一下Spark怎么基于內存計算的 說下什么是RDD(對RDD的理解)?RDD有哪些特點?說下知道的RDD算子 RDD底層原理 RDD屬性 RDD的緩存級別? Spark廣播變…

MongoDB筆記02

MongoDB中的數據具有靈活的模式,文檔在同一集合,但他們不需要具有相同的字段或結構集合,集合文檔中的公共字段可以包含不同類型的數據 MongoDB中的數據具有靈活的模式,與sql數據庫不同,sql數據庫必須在插入數據之前確…

Nuxt3 的生命周期和鉤子函數(六)

title: Nuxt3 的生命周期和鉤子函數(六) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:本文深入解析了Nuxt3框架中的多個核心生命周期鉤子和組件注冊功能,包括imports:sources、imports:extend、import…

刷代碼隨想錄有感(121):貪心算法——買賣股票的最佳時機III

題干&#xff1a; 代碼&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {if (prices.size() < 2) return 0;int buy1 prices[0];int buy2 prices[0];int sell1 0, sell2 0;for (int i 1; i < prices.size(); i) {buy1 min(bu…

LLVM 中的指令調度器及其工作過程

LLVM 中的指令調度器及其工作過程 概述 LLVM 中實現了多種指令調度器&#xff0c;分別作用于后端流程的不同階段&#xff0c;包括指令選擇階段的指令調度器、寄存器分配前的指令調度器和寄存器分配后的指令調度器 這三類調度器都有llc命令行選項可以控制其使能或禁用 在寄存…

解密Eureka UNKNOWN狀態:服務注冊的隱形守護者

&#x1f310; 解密Eureka UNKNOWN狀態&#xff1a;服務注冊的隱形守護者 在微服務架構中&#xff0c;Eureka作為Netflix開源的服務發現框架&#xff0c;扮演著服務注冊與發現的核心角色。然而&#xff0c;在Eureka的Dashboard上&#xff0c;我們有時會遇到服務狀態顯示為UNKN…

dsp入門

安裝環境 安裝 ccs5.5安裝 BIOS-MCSDK 多核軟件開發包安裝 仿真器驅動 工程創建與導入工程 創建工程 創建工程填信息添加.cmd文件&#xff0c;配置內存編譯 導入工程 導入 配置工程 選擇properties 環境變量 頭文件 庫文件 仿真器 添加仿真器 先調出仿真器界面創建仿…

rtthread stm32h743的使用(十二)spi設備fal驅動的使用

我們要在rtthread studio 開發環境中建立stm32h743xih6芯片的工程。我們使用一塊stm32h743及fpga的核心板完成相關實驗&#xff0c;核心板如圖&#xff1a; fal驅動的使用是建立在sfud驅動之上的&#xff0c;所以我們在上一節使用的工程基礎上繼續實驗。 1.在上一節工程的基礎…

SpringCloud Alibaba Seata2.0基礎入門與安裝

官網地址&#xff1a;https://seata.apache.org/zh-cn/ GitHub下載地址&#xff1a;https://github.com/apache/incubator-seata/releases 本文這里下載的是seata2.0.0版本。 【1】概述 ① Seata是什么 Simple Extensible Autonomous Transaction Architecture&#xff0c…

C++ 設計模式之訪問者模式

C 設計模式之訪問者模式 簡介 1、訪問者模式 &#xff08;Visitor&#xff09;是一種行為型設計模式&#xff0c;它表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。 使用該模式可以在不修改已有程序結構的前提…

vue3 全局引入 onMounted, reactive, ref 的插件全局引入

webpack 的引入 npm install -D unplugin-auto-import const AutoImport require(unplugin-auto-import/webpack).default;configureWebpack: {devtool: source-map,module: {rules: [{test: /\.mjs$/,include: /node_modules/,type: javascript/auto}],}, plugins: [Aut…

Java對象創建過程

在日常開發中&#xff0c;我們常常需要創建對象&#xff0c;那么通過new關鍵字創建對象的執行中涉及到哪些流程呢&#xff1f;本文主要圍繞這個問題來展開。 類的加載 創建對象時我們常常使用new關鍵字。如下 ObjectA o new ObjectA();對虛擬機來講首先需要判斷ObjectA類的…

Java代碼質量管理與持續集成

Java代碼質量管理與持續集成 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 引言 在當今軟件開發的環境中&#xff0c;高質量的代碼和持續集成是保證軟件項目…

# Sharding-JDBC從入門到精通(4)- Sharding-JDBC 入門程序幾種配置方式

Sharding-JDBC從入門到精通&#xff08;4&#xff09;- Sharding-JDBC 入門程序幾種配置方式 一、Sharding-JDBC 入門程序&#xff08;水平分表&#xff09;-使用 application.yml 配置文件的 方式 1、打開 idea 創建 artifactId 名為 dbsharding 的 maven 父工程。 --> i…

python sklearn機械學習模型-回歸

&#x1f308;所屬專欄&#xff1a;【機械學習】?作者主頁&#xff1a; Mr.Zwq??個人簡介&#xff1a;一個正在努力學技術的Python領域創作者&#xff0c;擅長爬蟲&#xff0c;逆向&#xff0c;全棧方向&#xff0c;專注基礎和實戰分享&#xff0c;歡迎咨詢&#xff01; 您…

redis實戰-添加商戶緩存

為什么要使用緩存 言簡意賅&#xff1a;速度快&#xff0c;好用緩存數據存儲于代碼中&#xff0c;而代碼運行在內存中&#xff0c;內存的讀寫性能遠高于磁盤&#xff0c;緩存可以大大降低用戶訪問并發量帶來的服務器讀寫壓力實際開發中&#xff0c;企業的數據量&#xff0c;少…