【问题标题】:Regex to remove consecutive same numbers正则表达式删除连续的相同数字
【发布时间】:2022-11-28 02:07:50
【问题描述】:

我正在尝试使用带有 JS 的正则表达式来删除所有连续的数字。我尝试了两种方法,第二种方法通过了,但我想知道第一种方法有什么问题

第一次尝试:

let a = "1 2 3 3 4 5 5 6 7 8 8 9";
a = a.split(" ").join("");
for (let i of a) {
  a = a.replace(/ii/g, i);
}

console.log(a)

第二个

let a = "1 2 3 3 4 5 5 6 7 8 8 9";
a = a.split(" ").join("");
for (let i of a) {
  a = a.replace(new RegExp(`(${i})(${i})`, "g"), "$1");
}

console.log(a)

【问题讨论】:

  • 您的第一段代码实际上是在字符串中查找 'ii',而不是在 for 循环中查找变量。
  • 顺便说一句,如果您想自己学习理解和编写正则表达式,我建议您尝试像regexr 这样的教育工具并在其中进行尝试。

标签: javascript regexp-replace


【解决方案1】:

let a = "1 2 3 3 4 5 5 6 7 8 8 9";

a = a.split(" ").join("");
let b = a.replace(/(.)+/g, '$1');
let c = b.split("").join(" ")

console.log(c)

【讨论】:

    【解决方案2】:

    您的第一个代码的问题在于它正在查找字符串'ii',而不是变量i 的两个连续实例。

    但是,使用match groups and back-references 可以更轻松地完成此操作。只需制作一个匹配任何数字的匹配组,然后至少重复该组一次。为使其工作,您还需要添加一个尾随空格以便匹配最后一个数字,但随后删除该空格。像这样:

    let a = "1 2 3 3 4 5 5 6 7 8 8 9";
    let b = (a + ' ').replace(/([1-9]s)+/g, '$1').slice(0, -1);
    
    console.log(b)

    此方法还将保留空格。如果您需要删除空格,那么您可以像这样简单地从结果中删除它们:

    let a = "1 2 3 3 4 5 5 6 7 8 8 9";
    let b = (a + ' ').replace(/([1-9]s)+/g, '$1').replaceAll(' ', '');
    
    console.log(b)

    【讨论】:

    • 无需添加空格并将其切片即可工作。
    • @caTS 在此特定示例中有效,但如果在末尾添加另一个连续数字则无效。例如,它会在 "1 2 3 3 4 5 5 6 7 8 8 9 9" 上中断而不添加和删除空格。
    猜你喜欢
    • 2014-05-20
    • 2019-05-12
    • 2023-02-02
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 2012-02-11
    相关资源
    最近更新 更多