var str=" hello world! , this is Cecy ";
var r1=/^\s|\s$/g;
console.log(str.match(r1));
console.log(str.replace(r1,''))
Here, the output I expect is "hello world!,this is Cecy", which means remove whitespaces in the beginning and the end of the string, and the whitespace before and after the non-word characters. The output I have right now is"hello world! , this is Cecy", I don't know who to remove the whitespace before and after "," while keep whitespace between "o" and "w" (and between other word characters).
p.s. I feel I can use group here, but don't know who
See regex in use here
\B\s+|\s+\B
\B
Matches a location where \b
doesn't match\s+
Matches one or more whitespace charactersconst r = /\B\s+|\s+\B/g
const s = ` hello world! , this is Cecy `
console.log(s.replace(r, ''))
See regex in use here.
(?!\b\s+\b)\s+
(?!\b +\b)
Negative lookahead ensuring what follows doesn't match
\b
Assert position as a word boundary\s+
Match any whitespace character one or more times\b
Assert position as a word boundary\s+
Match any whitespace character one or more timesconst r = /(?!\b\s+\b)\s+/g
const s = ` hello world! , this is Cecy `
console.log(s.replace(r, ''))
You can use the RegEx ^\s|\s$|(?<=\B)\s|\s(?=\B)
^\s
handles the case of a space at the beginning
\s$
handles the case of a space at the end
(?<=\B)\s
handles the case of a space after a non-word char
\s(?=\B)
handles the case of a space before a non-word char
Demo.
EDIT : As ctwheels pointed out, \b
is a zero-length assertion, therefore you don't need any lookbehind nor lookahead.
Here is a shorter, simpler version : ^\s|\s$|\B\s|\s\B
var str = " hello world! , this is Cecy ";
console.log(str.replace(/^\s|\s$|\B\s|\s\B/g, ''));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With