正则表达式:去除方括号 '[' 和 ']' 之间的空格

8
我已经在这个问题上纠结了一段时间。 在javascript中,我有一个字符串表达式,需要删除'['和']'之间的空格。
例如,该表达式可能是:
"[first name] + [ last name ] + calculateAge()"

我想要它变成:-
"[firstname] + [lastname] + calculateAge()"

我尝试了以下stackoverflow问题中的某些内容来匹配方括号,但并没有完全成功。如何让该问题中的正则表达式也适用于方括号?
有人能帮忙吗?
谢谢, AJ

我认为你不能一步完成这个操作。你需要先提取括号内的内容,去除其中的空格,然后再将其替换回去。 - Barmar
2
括号可以嵌套吗?如果可以,那么你不能使用JavaScript正则表达式来完成。如果不行,那就没问题了(如果括号始终正确平衡)。 - Tim Pietzcker
目前它不会被嵌套,所以看起来很简单。 - Akshat
3个回答

19

如果括号总是正确平衡的,而且它们从不嵌套,则你可以做到:

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

如果在字符串中有一个]字符,且与之相邻没有[]字符,则此操作仅替换空白字符。

\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.

4

尝试

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

演示: Fiddle

谢谢Arun。你能解释一下上面的表达式吗? - Akshat

-5

你可以使用这个

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

这在 Ruby 中可行


3
你有测试过吗?这个问题是关于JavaScript的,而在Ruby中,你会得到[firstname]+[lastname]+calculateAge()作为结果。 - Tim Pietzcker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接