Search code examples
javascriptregexremoving-whitespace

How do I remove all whitespaces except those between words with Regular Expression in Javascript


  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


Solution

  • Method 1

    See regex in use here

    \B\s+|\s+\B
    
    • \B Matches a location where \b doesn't match
    • \s+ Matches one or more whitespace characters

    const r = /\B\s+|\s+\B/g
    const s = ` hello world! , this is Cecy `
    
    console.log(s.replace(r, ''))


    Method 2

    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 times

    const r = /(?!\b\s+\b)\s+/g
    const s = ` hello world! , this is Cecy `
    
    console.log(s.replace(r, ''))