'Remove all special consecutive characters

Hopefully a simple one but I can't find any exact thread on SO for this particular instance:

If I have a string with multiple special characters in a row i.e 'this-is--a---string' I want to remove all duplicate non alphanumeric characters with regex so it would end up as 'this-is-a-string'

The closest i've found is .replace(/(.)\1+/g, '$1') but this removes duplicate letters rather than just special characters.

On a side note if anyone knows how to remove any non alphanumeric characters from the end of a string with regex then that would be really useful too!

Thanks in advance!



Solution 1:[1]

Since you want to collapse only repeated non alphanumeric characters, it should be enough to change your regex replacing the . character class with something that will negate the alphanumeric group [^a-zA-Z0-9].

subject = "a---------------bbbbbb6times_______@@@@@@";

var myregexp = /([^a-zA-Z0-9])\1+/mg;
result = subject.replace(myregexp, "$1");

console.log(result);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Diego De Vita