【问题标题】:Regex remove duplicate adjacent characters in javascript正则表达式删除javascript中重复的相邻字符
【发布时间】:2019-07-23 18:51:16
【问题描述】:

我一直在努力让我的正则表达式函数按预期工作。我的目标是无休止地迭代一个字符串(直到找不到匹配项)并删除所有重复的相邻字符。除了检查 2 个字符(彼此相邻)是否相等外,正则表达式仅应在其中一个字符为大写时删除匹配项。

例如正则表达式应该只删除“Xx”或“xX”。

我当前的正则表达式只删除小写字符后跟任何大写字符的匹配项。

(.)(([a-z]{0})+[A-Z])

如何实现查找相同的相邻字符以及查找大写字符后跟相等的小写字符的模式?

【问题讨论】:

  • 这里需要正则表达式吗?

标签: javascript regex


【解决方案1】:

您要么必须列出所有可能的组合,例如

aA|Aa|bB|Bb...

或者以编程方式实现它,无需正则表达式:

let str = 'fooaBbAfoo';
outer:
while (true) {
  for (let i = 0; i < str.length - 1; i++) {
    const thisChar = str[i];
    const nextChar = str[i + 1];
    if (/[a-z]/i.test(thisChar) && thisChar.toUpperCase() === nextChar.toUpperCase() && thisChar !== nextChar) {
      str = str.slice(0, i) + str.slice(i + 2);
      continue outer;
    }
  }
  break;
}
console.log(str);

【讨论】:

    【解决方案2】:

    寻找相同的相邻字符:/(.)\1/

    在 JavaScript 中不可能查找一个大写字符后跟一个相等的小写字符,因为它不支持 内联修饰符。如果他们是正则表达式应该是:/(.)(?!\1)(?i:\1)/,所以它匹配'xX'或'Xx'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多