I'm trying to find a regex to remove all leading/trailing spaces as well as all leading/trailing special characters.
If I have the string:
test = '~!#@$@ hello this is a #! test ^^#!^^ '
I'd like it to return as:
'hello this is a #! test'
So special characters and spaces in between the first and last letter are preserved, but all leading/trailing ones are cut out. Right now I have this:
test.replace(/[^a-zA-Z ]/g,"").replace(/^\s+|\s+$/g, "")
which returns:
'hello this is a test'
so it is removing all special characters and leading/trailing spaces. How can I preserve that "#!" between "a" and "test"?
By using the unicode flag u you can use the Unicode Categories for Letters \p{L} and Numbers \p{N} in a negative character class [^...].
And match them at the start ^ or | at the end $ to get anything that's not a letter or number and is trailing or leading.
Pattern:
^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$
Test Snippet:
let test = '~!#@$@ hello this is a #! test ^^#!^^ ';
test = test.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu, '');
document.write('['+test+']');