js 目标字符串在另一个字符串中第n次出现时替换

var str = `
关关雎鸠,在河之洲。
窈窕淑女,君子好逑。
参差荇菜,左右流之。
窈窕淑女,寤寐求之。
求之不得,寤寐思服。
悠哉悠哉,辗转反侧。
参差荇菜,左右采之。
窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。
窈窕淑女,钟鼓乐之。`
var num = 2
var cha = '窈窕淑女'
var fillTxt= '__1__'

如何将str第二个窈窕淑女替换成__1__
结果

关关雎鸠,在河之洲。
窈窕淑女,君子好逑。
参差荇菜,左右流之。
__1__,寤寐求之。 
求之不得,寤寐思服。
悠哉悠哉,辗转反侧。
参差荇菜,左右采之。
窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。
窈窕淑女,钟鼓乐之。
阅读 4.3k
5 个回答

image.png
=

举个例子:请看代码,matchStr表示匹配到的字符,index表示位于字符串的位置,str就是完整的字符串

var appearNum=0 // 记录字符串出现次数
"121".replace(/1/g,function(matchStr,index,str){
    console.log(matchStr,index,str);
    if(matchStr==="1"){
        appearNum++
    }
    if(appearNum==2){
        return "_"
    }else{
        return matchStr
    }})

image.png

https://codepen.io/1567887123...

var str = `
关关雎鸠,在河之洲。
窈窕淑女,君子好逑。
参差荇菜,左右流之。
窈窕淑女,寤寐求之。
求之不得,寤寐思服。
悠哉悠哉,辗转反侧。
参差荇菜,左右采之。
窈窕淑女,琴瑟友之。
参差荇菜,左右芼之。
窈窕淑女,钟鼓乐之。`;
var num = 2;
var cha = "窈窕淑女";
var fillTxt = "__1__";
// 替换匹配位置的文本
function replaceIndex(str, cha, num, fillTxt) {
  var s = [...str.matchAll(new RegExp(cha, "g"))][num - 1];
  return (
    s.input.substring(0, s.index) +
    fillTxt +
    s.input.substring(s.index + fillTxt.length - 1)
  );
}

document.querySelector("#topic").innerText = replaceIndex(str, cha, num, fillTxt);
document.querySelector("#result").innerText = cha;
str.replace(new RegExp(`((?:${cha}(?:\\s|\\S)*?){${num - 1}})${cha}`), `$1${fillTxt}`)
[...'strstrstr'.matchAll('str')]
  .map((item, idx) => (idx === 1 ? 'abc' : item[0]))
  .join('');
// => strabcstr
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题