Remove consecutive duplicate characters in a string javascript

前端 未结 4 1087
臣服心动
臣服心动 2020-12-20 22:14

I have some string like 11122_11255_12_223_12 and the output I wish to have is this: 12_125_12_23_12
I already looked at this and also this a

相关标签:
4条回答
  • 2020-12-20 22:36

    If you are intersted in a non-regex way, you can split the items on the _, and then map that by creating a Set of characters which will remove duplicates. Then you just join the data back together. Like this:

    var str = '11122_11255_12_223_12';
    let result = str
      // Split on the underscore
      .split('_')
      // map the list
      .map(i =>
        // Create a new set on each group of characters after we split again
        [...new Set(i.split(''))].join('')
      )
      // Convert the array back to a string
      .join('_')
    
    console.log(result)

    0 讨论(0)
  • 2020-12-20 22:42

    I really like the regex solution. However, first thing which would come into my mind is a checking char by char with a loop:

    const str = "11122_11255_12_223_12";
    let last = "";
    let result = "";
    for(let i = 0; i < str.length; i++){
      let char = str.charAt(i);
      if(char !== last){
        result += char;
        last = char;
      }
    }
    console.log(result);

    0 讨论(0)
  • 2020-12-20 22:42

    Easy and recursive way

    let x = "11122_11255_12_223_12".split('');
    let i = 0;
    let j = 1;
    
    function calc(x) {
      if (x[i] == x[j]) {
        x.splice(j, 1);
        calc(x);
      }
      
      if (j == x.length) {
        return x.join('');
      }
      
      i += 1;
      j += 1;
      calc(x);
    }
    console.log(calc(x));

    0 讨论(0)
  • 2020-12-20 22:45

    You can use capture group and back-reference:

    result = str.replace(/(.)\1+/g, '$1')
    

    RegEx Demo

    • (.): Match any character and capture in group #1
    • \1+: Match 1+ characters same as in capture group #1
    0 讨论(0)
提交回复
热议问题