Skip to content

Javascript RegEx to match all whitespaces except between special characters

I need a regEx to match all whitespaces except those inside @ signs to make a correct split.

I have this string:

[0] == @Item 1@

With the split I need the following array (with or without @ in 3rd element):

var array = ["[0]","==","@Item 1@"];

With a simple split(” “) I get this:

var array = ["[0]","==","@Item","1@"];

Thank you for your help.

Answer

You can use

const text = '[0] == @Item 1@';
console.log( text.match(/(?:@[^@]*@|S)+/g) )

See the regex demo. The (?:@[^@]*@|S)+ pattern means:

  • (?: – start of a non-capturing group:
    • @[^@]*@ – a @ char, zero or more chars other than @ and then a @ char
    • | – or
    • S – any non-whitespace char
  • )+ – end of the group, repeat one or more times.

The /g flat tells .match() to extract all occurrences.