7

I have been breaking my head on this for sometime now. In javascript I have a string expression where I need to remove the spaces between '[' and ']'.

For example the expression can be :-

"[first name] + [ last name ] + calculateAge()"

I want it to become :-

"[firstname] + [lastname] + calculateAge()"

I tried something from the following stackoverflow question for square brackets but didn't quite get there. How do I make the regex in that question, work for square brackets too?

Can anyone help?

Thanks, AJ

Community
  • 1
  • 1
Akshat
  • 278
  • 5
  • 19
  • I don't think you can do this in one step. You have to extract the contents of the brackets, remove spaces from that, and then substitute that back in. – Barmar May 20 '13 at 06:58
  • 2
    Can the brackets be nested? If so, you can't do it with a JavaScript regex. If not, no problem (if brackets are always correctly balanced). – Tim Pietzcker May 20 '13 at 07:24
  • It wont be nested as of now. So looks simple. – Akshat May 20 '13 at 07:32

3 Answers3

18

If brackets are always balanced correctly and if they are never nested, then you can do it:

result = subject.replace(/\s+(?=[^[\]]*\])/g, "");

This replaces whitespace characters if and only if there is a ] character ahead in the string with no intervening [ or ] characters.

Explanation:

\s+       # Match whitespace characters
(?=       # if it's possible to match the following here:
 [^[\]]*  # Any number of characters except [ or ]
 \]       # followed by a ].
)         # End of lookahead assertion.
Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561
4

Try

"[first name] + [ last name ] + calculateAge()".replace(/\[.*?\]/g, function(string) {
    return string.replace(/\s/g, '');
})

Demo: Fiddle

Arun P Johny
  • 384,651
  • 66
  • 527
  • 531
-5

You can use this

"[first name] + [ last name ] + calculateAge()".gsub(/\s+/, "")

This works in ruby

Ravendra Kumar
  • 1,072
  • 10
  • 29
  • 3
    Did you even test that? The question is about JavaScript, not Ruby, and in Ruby, you get `[firstname]+[lastname]+calculateAge()` as a result. – Tim Pietzcker May 20 '13 at 07:23