js 关于 replace 取值、替换第几个匹配项_全球快报

来源:博客园时间:2023-05-23 10:34:38
〇、前言

在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。


(资料图片)

一、替换第一个匹配项字符串替换
let strtest = "0123测试replace456测试replace789测试replace0"console.log("原字符串:" + strtest)let outstr = strtest.replace("测试","ceshi")console.log("输出字符串:" + outstr)// 原字符串:0123测试replace456测试replace789测试replace0// 输出字符串:0123ceshireplace456测试replace789测试replace0
正则表达式替换

当直接在被替换字符串恰后加上 / 时,不添加修饰符,就等同于直接字符串替换。

let strtest = "0123测试replace456测试replace789测试replace0"console.log("原字符串:" + strtest)let outstr = strtest.replace(/测试/, "ceshi")console.log("输出字符串:" + outstr)// 原字符串:0123测试replace456测试replace789测试replace0// 输出字符串:0123ceshireplace456测试replace789测试replace0
二、替换全部匹配项字符串分组再联合
let strtest = "0123测试replace456测试replace789测试replace0";console.log("原字符串:" + strtest)let arrstr = strtest.split("测试");let outstr = arrstr.join("ceshi");console.log("输出字符串:" + outstr)// 原字符串:0123测试replace456测试replace789测试replace0// 输出字符串:0123ceshireplace456ceshireplace789ceshireplace0
正则表达式替换

格式:/待替换的字符串/g、/待替换的字符串/mgi。

g:执行全局匹配,替换全部匹配项;

i:不区分大小写;

m:多行匹配。

gim 可所以组合使用。

let strtest = "0123测试replace456测试replace789测试replace0"console.log("原字符串:" + strtest)let outstr = strtest.replace(/测试/g, "ceshi")// 另一种写法:// let reg = new RegExp("测试", "g")// let outstr = strtest.replace(reg, "ceshi")console.log("输出字符串:" + outstr)// 原字符串:0123测试replace456测试replace789测试replace0// 输出字符串:0123ceshireplace456ceshireplace789ceshireplace0
三、替换第 n 个匹配项

下边以第二个为例。

字符串分组再联合

思路:先通过被替换项分组,再根据目标位数把整个分组分为两个部分,在通过替换字符串联合。

let num = 2 // 定义替换第二个匹配项let strtest = "0123测试replace456测试replace789测试replace0";console.log("原字符串:" + strtest)let arrstr = strtest.split("测试");if(arrstr.length < num)    returnlet arrstr1=[],arrstr2=[]for(let ii=0;ii
正则表达式实现

将第一个匹配项跳过,并把第二个匹配项之前的内容标识为变量。

let strtest = "0123测试replace456测试replace789测试replace0";console.log("原字符串:" + strtest)let outstr = strtest.replace(/((?:.*?测试.*?){1}.*?)测试/m, "$1-ceshi-")// ?: 表示:其后边的 pattern 匹配但不获取。匹配项被标识为 $1,后续会引用// .*? 表示:.* 除 "/n" 之外的任意个任意字符// {1} 表示:其前边的 pattern 出现一次// /pattern/m 表示: m 全局查询console.log("输出字符串:" + outstr)// 原字符串:0123测试replace456测试replace789测试replace0// 输出字符串:0123测试replace456测试replace789-ceshi-replace0

参考:https://stackoverflow.com/questions/42943096/replace-nth-match-of-matches-with-regex

四、替换指定标记之间的内容字符串分组再联合
let strtest = "0123replace456测试replace789测试replace0";let startstr = ""let endstr = ""if (strtest.indexOf(startstr) > strtest.indexOf(endstr))    returnconsole.log("原字符串:" + strtest)let arr = strtest.split(startstr)let arr2 = arr[1].split(endstr)let resultstr = arr2[0]let outstr = startstr + resultstr + endstrconsole.log("输出字符串:" + outstr)// 原字符串:0123replace456测试replace789测试replace0// 输出字符串:replace456测试replace78
正则表达式方法 replace()、match()、exec()

替换为指定字符串:( replace() )

let strtest = "0123replace456测试replace789测试replace0";console.log("原字符串:" + strtest)let outstr = strtest.replace(/(.*?)<\/Object>/m, "-ceshi-") // \ 为转义字符console.log("输出字符串:" + outstr)// 原字符串:0123replace456测试replace789测试replace0// 输出字符串:0123-ceshi-9测试replace0

取出带标记字符串的内容:( match() )

let strtest = "0123replace456测试replace789测试replace0";console.log("原字符串:" + strtest)let outstr = strtest.match(/(.*?)<\/Object>/m)console.log("输出字符串:" + outstr)// 原字符串:0123replace456测试replace789测试replace0// 输出字符串:replace456测试replace78

当可能有多个匹配项时:( exec() )

let strtest = "这是要提取的内容,还有另一个内容"console.log("原字符串:" + strtest)let regex = /(.*?)<\/Object>/gmconst matches = []let matchwhile ((match = regex.exec(strtest)) !== null) {    matches.push(match[1])    console.log(match)}console.log("输出全部匹配项:", matches)// 原字符串:这是要提取的内容,还有另一个内容// (2)["要提取的内容", "要提取的内容", index: 2, input: "这是要提取的内容,还有另一个内容", groups: undefined]// (2)["另一个内容", "另一个内容", index: 28, input: "这是要提取的内容,还有另一个内容", groups: undefined]// 输出全部匹配项: (2)["要提取的内容", "另一个内容"]	  
	  
      

标签:

相关阅读

推荐阅读

js 关于 replace 取值、替换第几个匹配项_全球快报

js 关于 replace 取值、替换第几个匹配项_全球快报

〇、前言在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。更多

2023-05-23 10:34:38
米其林餐厅中国有几家?米其林指南三星标准是什么?

米其林餐厅中国有几家?米其林指南三星标准是什么

米其林三星中国有几家?有三十家。米其林唯一的三星是唐阁, 位置是在上海,它一夜之间被评为米其林三星,中国第一家被评为米其林三星的餐更多

2023-05-23 10:53:59
喝牛奶有哪些注意事项?螃蟹和牛奶可以一起吃吗?

喝牛奶有哪些注意事项?螃蟹和牛奶可以一起吃吗?

喝牛奶有哪些注意事项1、少量多次。乳糖不耐受人群因体内乳糖酶活性低,一次不能分解和吸收过多乳糖,喝牛奶时可采用少量多次的方法,比如更多

2023-05-23 10:53:19
四不像主要分布在什么地方?四不像是什么动物?

四不像主要分布在什么地方?四不像是什么动物?

四不像主要分布在什么地方麋鹿原产于中国长江中下游沼泽地带,以青草和水草为食物。性好合群,善游泳,喜欢以嫩草和水生植物为食,曾经广泛更多

2023-05-23 10:52:47
痘疤痘坑的修复方法有哪种?脸上的痘印会自己消失吗?

痘疤痘坑的修复方法有哪种?脸上的痘印会自己消失

痘疤痘坑的修复方法有哪种网上关于痘疤痘坑的修复方法有很多,方法一:可以在晚上睡觉之前,将维生素E涂在脸上,等到第二天醒来之后再用清更多

2023-05-23 10:52:06
杀鸡取卵的意思是什么?杀鸡取蛋的故事告诉我们什么道理?

杀鸡取卵的意思是什么?杀鸡取蛋的故事告诉我们什

杀鸡取卵的意思是什么?杀鸡取卵告诉我们什么样的道理?杀鸡取卵的意思出自《伊索寓言生金蛋的鸡》。比喻一些人贪图眼前的利益,而以牺牲长远更多

2023-05-23 10:51:45
哥伦比亚首都是哪个城市?哥伦比亚有那些特产?

哥伦比亚首都是哪个城市?哥伦比亚有那些特产?

哥伦比亚首都是哪个城市?圣菲波哥大是昆迪纳马卡省的省会城市,是哥伦比亚的首都,也是哥伦比亚最大的城市,面积约1587平方公里,人口超过8更多

2023-05-23 10:51:21
天天精选!发现最美铁路,奏响交通强国时代强音

天天精选!发现最美铁路,奏响交通强国时代强音

漫画作者:隋英伟5月22日起,由中央网信办网络社会工作局、中国国家铁路集团有限公司党组宣传部组织的采访更多

2023-05-23 10:01:56
+ 点击查看更多精彩

精彩放送

太原12个楼盘发放18张预售证 仅有3个项目为纯新盘
    今年9月,太原市房产管理局给省城12个楼盘正式发放了18张预售证。...
截至9月底 杭州共完成不动产登记988.72万件
    房产证、土地证,两证合一了!2016年6月1日,在市民之家举行的全市...
各地继续密集发布楼市宽松政策 多地支持农民进城购房
    近期以来,各地继续密集发布楼市宽松政策,其中包括长春、遵义多...
宁波:关于“带押过户”新模式的7个典型问题权威解答来了
    日前,宁波市不动产登记中心试点二手房带押过户新模式。新模式下...
多地政府大手笔回购商品房 苏州拟对10个板块回购约1万套新房
    越来越多的地方政府出手回购当地商品房。近日,一份苏州市政府部...
市场降温豪宅不冷 媒体:北上广深掀起“豪宅热”
    尽管整体市场低迷,但豪宅板块比较稳定。争取成交,忙完这一次,...
    最新见闻