在搜索的特定索引处使用.replace()的Javascript

时间:2018-10-20 15:36:47

标签: javascript

是否存在可以在字符串的特定索引处一次替换字符串中的字符串的函数?示例:

var string1="my text is my text and my big text";
var string2="my";
string1.replaceAt(string2,"your",2);

最终的输出将是“我的文字是我的文字和您的大文字”

4 个答案:

答案 0 :(得分:6)

您可以进行一些操作,而无需任何正则表达式。

我使用this function来获取字符串中另一个字符串的位置(索引)。

从那里开始,就像将子字符串从头开始返回到找到的索引一样简单,注入替换项,然后返回字符串的其余部分。

function replaceAt(s, subString, replacement, index) {
  const p = s.split(subString, index+1).join(subString);
  return p.length < s.length ? p + replacement + s.slice(p.length + subString.length) : s;
}

console.log(replaceAt("my text is my text and my big text", "my", "your", 2))
console.log(replaceAt("my text is my text and that's all", "my", "your", 2))
console.log(replaceAt("my text is my my my my text", "my", "your", 2))

答案 1 :(得分:2)

没有内置的方法可以执行此操作,但是您可以利用.replace()可以传递函数的事实:

let count = 0;
console.log("my text is my text and my big text".replace(/my/g, function() {
  if (count++ === 2) return "your";
  return "my";
}));
该函数将匹配的字符串和所有组作为参数传递,但是在这种情况下,这并不是必须的。

答案 2 :(得分:2)

这是原型版本

String.prototype.replaceAt = function(str1,str2,pos) {
  let count = 0;
  let re = new RegExp(str1,"g");
  return this.replace(re, function() {
    return (count++ === pos) ? str2 : str1;
  });
}
console.log("my text is my text and my big text".replaceAt("my","your",2))

答案 3 :(得分:1)

因为我们需要在索引中替换单词,而对于其他单词,我们不需要任何更改,因此请使用“ map”。通过split并使用map将字符串转换为数组,并按原样返回每个元素,并在到达特定索引时按单词替换(按index-- == 0的逻辑)。最终将返回数组连接到字符串。

    function replace(text, strFrom, strTo, index) {
    	return text.split(' ')
                   .map(d => d == strFrom && index-- == 0
                                 ? strTo 
                                 : d)
                   .join(' ')
    }
    
    var string = 'my text is my text and my big text';
    
    string = replace(string, 'my', 'your', 2)
    
    console.log(string)