在字符串中搜索和替换

Search and Replace in a String

本文关键字:替换 搜索 字符串      更新时间:2023-09-26

下面的代码在字符串中循环,并删除字符串中的字符与removeDuplicates((中传递的字符之间的任何重复项。所以数组将等于"iel",它可以完美地工作。然而,如果我通过一个带有双字母的单词,如"grass"数组将等于ra,因为s的两个实例都将被删除。我只需要删除字母s的一个实例,而不需要删除两个实例?

 var currentWord = "field";
 removeDuplicates(f,d);
 removeDuplicates:function(i, j){
      var arr = []
      var w = "";
      for(k=0;k<currentWord.length;k++){
           l = currentWord[k];
           arr.push(l);
           if(i === l){          
                arr.splice(i,1);
                index = arr.indexOf(i);
                arr.splice(index, 1);
            };
            if(j === l){
                index = arr.indexOf(j);
                arr.splice(index, 1);
                break;
            };
        }
        for(l=0;l<arr.length;l++){
            w += arr[l]   
        }
        return w;
    },

我想您正在尝试查找并替换(删除(字符串中的匹配字符。

你可以这样做:

演示:http://jsfiddle.net/gkzHX/

function findAndReplace(a, b) {
    b.forEach(function(s) {
        a = a.replace(s, '');
    });
    return a;
}
console.log(findAndReplace("field", ['f', 'd'])); // returns iel
console.log(findAndReplace("grass", ['g', 's'])); // returns ras

replace替换目标字符串中第一个出现的字符。


此外,正如@thg435在评论中指出的那样,您可以将集合作为字符串而不是数组传递,然后在函数内部将其转换为数组,然后用replace对其进行reduce处理。

function findAndReplace(a, b) {
    return b.split("").reduce(function(a, s) {
        return a.replace(s, '');
    }, a);
}

现在您可以将搜索字符作为字符串传递:

console.log(findAndReplace("field", 'fd'));
console.log(findAndReplace("grass", 'gs'));

@thg435的小提琴:http://jsfiddle.net/gkzHX/1/

您只需使用.replace()方法:

removeDuplicates: function() {
    var s = currentWord;
    for (var i = 0; i < arguments.length; ++i) {
        s = s.replace(arguments[i], '');
    }
    return s;
}
removeDuplicates('f', 'd'); // iel
removeDuplicates('g', 's'); // ras