Javascript 目标:去除某些字符附近的空白

Javascript 目标:去除某些字符附近的空白,javascript,regex,replace,Javascript,Regex,Replace,我在做什么: > ' { foo ( bar: 8 ) { baz: 9 fun: bun } } '.replace(/\s[{}():]\s/g, ''); < "foobar: 8{ baz: 9 fun: bun} " '{foo(bar:8){baz:9 fun:bun}}'。替换(/\s[{}():]\s/g'); ??? “{foo(bar:8){baz:9 fun:bun}}”。替换(/\s*(\[\\]\\\{\\\}\(\[\\)\\:)\s*/g,$1'))

我在做什么:

> ' { foo ( bar: 8 ) { baz: 9 fun: bun } } '.replace(/\s[{}():]\s/g, '');
< "foobar: 8{ baz: 9 fun: bun} "
'{foo(bar:8){baz:9 fun:bun}}'。替换(/\s[{}():]\s/g');
<“foobar:8{baz:9 fun:bun}”
我想做的是:

> ???
< "{foo(bar:8){baz:9 fun:bun}}"
>???
<“{foo(bar:8){baz:9 fun:bun}”

这与压缩从客户端发送到graphql服务器的查询有关。;-)

恐怕正则表达式不适合您的需要,一个合适的库更合适


同时,您可以尝试
.replace(/\B |\B/,“”)
,但它肯定不能涵盖所有情况,而且肯定会中断一些请求。这至少涵盖了您的示例。

您必须在正则表达式中使用capture group来替换没有空格的字符:

> '{ foo ( bar: 8 ) { baz: 9 fun: bun } } '.replace(/\s*(\[|\]|\{|\}|\(|\)|\:)\s*/g, '$1')
< "{foo(bar:8){baz:9 fun:bun}}"
>“{foo(bar:8){baz:9 fun:bun}}”。替换(/\s*(\[\\]\\\{\\\}\(\[\\)\\:)\s*/g,$1'))
<“{foo(bar:8){baz:9 fun:bun}”

括号捕获表达式,
$1
允许您使用此表达式。

是的,我想我需要一个轻量级的lexer。我邪恶的一面是我认为我能以某种方式走捷径。无论如何,这是我需要确认的,所以我会接受这个答案。我试图避免另一个外部依赖,但这正是我需要的:@jerome Nice,正是你需要的,谢谢分享!这个包的压缩效果比下面的正则表达式更有效。谢谢。重量更轻,比完整的lexer更简单。不知道性能如何,我接下来会看一看。