js如何替换字符串中匹配到多处中某一指定节点?
抛出一个问题,如图,搜索关键字,匹配到四处,那我鼠标放在第二处,我想把它变个颜色,该怎么实现呢?回到文章的标题,js如何替换字符串中匹配到多处中某一指定节点?
字符串的替换,我们首先想到的一个属性是replace:
strObject.replace(reg/substr,replacement)
两个参数,第一个参数,需要替换的值(可以是正则匹配式也可以是字符串),第二个参数,替换成的值。
str ="abcdefabdrdwss";
str.replace(/"ab"/g, "xy");
console.log(str) // xycdefxydrdwss
当我们使用正则表达式,如上,加上g,就是全局匹配,不加就是匹配第一个。但是我就想替换第二处的ab。好像没有直接可用的api。那我们可不可以拿到第二处的下标位置,通过字符串截取拼接的方式实现呢?
顺着这个思路,如何找到第二处的下标位置。
let str ="abcdefabdrdwss";
const reg = new RegExp('ab', 'g');
let ret;
const arr=[];
while((ret = reg.exec(str))!==null) {
arr.push({id:ret.index,content:ret.input}) // 通过循环把每次匹配的开始下标都放到arr中
}
console.log(arr) //[{id:0,content:"abcdefabdrdwss"},{id:6,content:"abcdefabdrdwss"}]
每处的下标都收集到了,再看如何替换。
// 字符串的替换,四个参数,第一个是原始字符串,第二个是替换的开始位置,第三是替换的内容
//第四个参数,这里是替换几位index就加几
const replaceStr = (strs, index, text,len) => {
return strs.substring(0, index) + text + strs.substring(index + len);
};
结合上面的内容,可以直接替换第二个"ab"了:
const newVal= replaceStr(str, arr[1].id, 'xy',2);
console.log(newVal) // abcdefxydrdwss
附上完整的js代码示例:
const str ="这是主体内容,有很多内容,喜欢看这个内容就关注吧";
const reg = new RegExp('内容', 'g');
let ret;
const arr=[];
while((ret = reg.exec(str))!==null) {
arr.push({id:ret.index,content:ret.input})
}
const replaceStr = (strs, index, text,len) => {
return strs.substring(0, index) + text + strs.substring(index + len);
};
// 替换文本的第三处“内容”为 “文章”
const newVal= replaceStr(str, arr[2].id, '文章',2);
console.log(newVal) // 这是主体内容,有很多内容,喜欢看这个文章就关注吧
转载请注明出处!
js如何替换字符串中匹配到多处中某一指定节点?的更多相关文章
- js replace替换字符串,同时替换多个方法
在实际开发中,经常会遇到替换字符串的情况,但是大多数情况都是用replace替换一种字符串,本文介绍了如何使用replace替换多种指定的字符串,同时支持可拓展增加字符串关键字. let conten ...
- JS正则替换字符串
1.只替换第一次出现的字符: text.replace(/javascript/i, "JavaScript"); //正则用//来将正则包起来 i表示区分大小写 2.全局替换: ...
- js替换字符串的所有示例代码
js如何替换字符串中所有. /** * 替换字符串中所有 * @param obj 原字符串 * @param str1 替换规则 * @param str2 替换成什么 * @return 替换后的 ...
- Python正则替换字符串函数re.sub用法示例(1)
本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...
- (DT系列四)驱动加载中, 如何取得device tree中的属性
本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属性是如何取得的.一:系统级初始化DT_MACHINE_START 主要是定义"struct m ...
- 【转】(DT系列四)驱动加载中, 如何取得device tree中的属性
原文网址:http://www.cnblogs.com/biglucky/p/4057488.html 本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属 ...
- js正则实现从一段复杂html代码字符串中匹配并处理特定信息
js正则实现从一段复杂html代码字符串中匹配并处理特定信息 问题: 现在要从一个复杂的html代码字符串(包含各种html标签,数字.中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他 ...
- js替换字符串中所有指定的字符
第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replac ...
- js替换字符串中的数字或非数字
替换字符串中的数字 var text = "abc123"; text=text.replace(/[0-9]/ig,""); 此时得到的text为" ...
随机推荐
- 自己整理了一个 Dapper的Helper助手类
链接字符串配置: <connectionStrings> <add name="db" connectionString="server=.;datab ...
- 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录
补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...
- 海量数据架构下如何保证Mycat的高可用?
写在前面 在<冰河,能讲讲Mycat如何实现MySQL的读写分离吗?>一文中,我们实现了使用Mycat实现MySQL的读写分离.然而,此时的Mycat只有一个节点,如果Mycat节点宕机了 ...
- DVWA各等级XSS
xss原理及基本介绍 XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器 ...
- CentOS7搭建Hadoop-3.3.0集群手记
前提 这篇文章是基于Linux系统CentOS7搭建Hadoop-3.3.0分布式集群的详细手记. 基本概念 Hadoop中的HDFS和YARN都是主从架构,主从架构会有一主多从和多主多从两种架构,这 ...
- 马赛克密码破解——GitHub 热点速览 Vol.50
作者:HelloGitHub-小鱼干 "xx"(爆粗口) 这个词是最能体现本人看到本周 GitHub 热点的心情的.那一天,看到用图片处理技术还原马赛克密码的 Depix 便惊为天 ...
- Linux下双网卡绑定bond配置实例详解
本文源自:http://blog.itpub.net/31015730/viewspace-2150185/ 一.什么是bond? 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡冗余,带宽 ...
- elementUI的动态tabs页的使用,vue的动态组件的操作
elementUI的动态tabs页的使用,vue的动态组件的操作 有时候我们需要用到动态的tab页,结合不同的页面内容来显示.这里是使用了elementUI的动态tabs页来实现的 <div c ...
- python 爬虫库安装
一键安装python爬虫库 pip3 install requests selenium beautifulsoup4 pyquery pymysql pymongo redis flask djan ...
- Spark SQL 小文件问题处理
在生产中,无论是通过SQL语句或者Scala/Java等代码的方式使用Spark SQL处理数据,在Spark SQL写数据时,往往会遇到生成的小文件过多的问题,而管理这些大量的小文件,是一件非常头疼 ...