在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。
一、替换第一个匹配项字符串替换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 = "01239测试replace0";let startstr = ""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)// 原字符串:01239测试replace0// 输出字符串:
正则表达式方法 replace()、match()、exec()替换为指定字符串:( replace() )
let strtest = "01239测试replace0";console.log("原字符串:" + strtest)let outstr = strtest.replace(/
取出带标记字符串的内容:( match() )
let strtest = "0123replace456测试replace78 9测试replace0";console.log("原字符串:" + strtest)let outstr = strtest.match(/(.*?)<\/Object>/m)console.log("输出字符串:" + outstr)// 原字符串:0123replace456测试replace78 9测试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)["要提取的内容", "另一个内容"]
标签:
X 关闭
X 关闭