根据条件从GraphQL中删除空格和换行符

问题描述

我正在尝试从GraphQL查询中删除多余的空格和换行符,但 filter 参数中2个双引号之间的数据应保持不变。

这是在我们快速的CDN上接收查询的方式

# input
{"query":"query OpName    {\n   itemCollection         (filter: { text: "aa aa     aa",text2: "aa             aa"}){\n    group         {      slug\n\n\n\n            text text2  } }   }"}

# expected output
{"query":"query OpName { itemCollection (filter: { text: "aa aa     aa",text2: "aa             aa"}){ group { slug text text2 } } }"}

目标是

  • 从查询中删除多余的空格
  • 两个双引号之间的空格应在graphql查询中保持完整(因为 filter 参数的值将用于匹配数据库中的记录)

我们尝试了以下方法:

    fastly docs给出
  • \s+(?=(?:['|%22](?:\\['|%22]|[^'|%22])+['|%22]|[^'|%22])+$)
  • \s+(?=([^"]*"[^"]*")*[^"]*$)

但这似乎不起作用。

解决方法

我建议分3个步骤进行操作:

  • 暂时保存filter
  • 进行替换(删除不需要的空格);
  • 重新添加filter

所需的正则表达式变得非常简单(并且我想更快,因为您不需要前瞻或其他技巧)。


替代:

将字符串分成三部分:

  • filter之前;
  • filter;
  • filter之后。

在“ before”和“ after”字符串中进行替换。最后加入零件。


regex for splitting可能看起来像:

(.*?)(filter: {[^}]*})(.*)

使用以下内容重建最终字符串:

removeSpaces(group1) + group2 + removeSpaces(group3)

removeSpaces()实际上将\s+替换为 。如果要保留新行(\n),请用 +替换

我对您的编程语言不是很熟悉,因此我无法提供确切的代码,但是您应该可以理解。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...