Tomjesch
Tomjesch

Reputation: 510

Regex remove duplicate adjacent characters in javascript

I've been struggling getting my regex function to work as intended. My goal is to iterate endlessly over a string (until no match is found) and remove all duplicate, adjacent characters. Aside from checking if 2 characters (adjacent of each other) are equal, the regex should only remove the match when one of the pair is uppercase.

e.g. the regex should only remove 'Xx' or 'xX'.

My current regex only removes matches where a lowercase character is followed by any uppercase character.

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

How can I implement looking for the same adjacent character and the pattern of looking for an uppercase character followed by an equal lowercase character?

Upvotes: 2

Views: 1057

Answers (2)

Lyzard Kyng
Lyzard Kyng

Reputation: 1568

Looking for the same adjacent character: /(.)\1/

Looking for an uppercase character followed by an equal lowercase character isn't possible in JavaScript since it doesn't support inline modifiers. If they were regex should be: /(.)(?!\1)(?i:\1)/, so it matches both 'xX' or 'Xx'

Upvotes: 3

CertainPerformance
CertainPerformance

Reputation: 370779

You'd either have to list out all possible combinations, eg

aA|Aa|bB|Bb...

Or implement it more programatically, without regex:

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

Upvotes: 3

Related Questions