删除字符串javascript中的连续重复字符

问题描述 投票:3回答:3

我有一些像11122_11255_12_223_12的字符串,我想要的输出是:12_125_12_23_12 我已经看过thisalso this等 但是我没有像上面所描述的那样。

实际上,我使用here作为我的目的,但有些事情是错误的。

这是我的代码:

var str='11222_12_111_122_542_1212333_122';
var result = str.replace(/(1{2,}|2{2,}|3{2,}|4{2,}|5{2,}|6{2,}|7{2,}|8{2,}|9{2,})/g,'$1');
console.log(result);

它不起作用。它给了我输出的确切输入。

正如我上面提到的,我有一些类似11122_11255_12_223_12的字符串,我想要的输出是:12_125_12_23_12,它表示下划线之间是一个数字,并且对于每个数字,如果有两个或更多数字彼此相邻(例如:223)有两个2),我想保留其中一个。 谢谢。

javascript regex
3个回答
6
投票

您可以使用捕获组和反向引用:

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

RegEx Demo

  • (.):匹配组#1中的任何角色和捕获
  • \1+:匹配1 +字符与捕获组#1相同

1
投票

我非常喜欢正则表达式解决方案。但是,我想到的第一件事是用char循环检查char:

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);

1
投票

如果您以非正则表达式方式进行设置,则可以在_上拆分项目,然后通过创建一个Set字符来映射它,这将删除重复项。然后,您只需将数据重新加入。像这样:

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)
© www.soinside.com 2019 - 2024. All rights reserved.