首页 > 解决方案 > 根据条件从 GraphQL 中删除空格和换行符

问题描述

我正在尝试从我的 GraphQL 查询中删除额外的空格和换行符,但过滤器参数中两个双引号之间的数据应该保持不变。

以下是我们 fastly 的 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 } } }"}

目标是

我们尝试了以下方法:

但这似乎不起作用。

标签: regexpcrevclfastly

解决方案


我建议分三步进行:

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

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


选择:

将字符串分成 3 部分:

  • 之前filter
  • filter;
  • 之后filter

在“之前”和“之后”字符串中进行替换。加入最后的部分。


用于拆分的正则表达式可能如下所示:

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

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

removeSpaces(group1) + group2 + removeSpaces(group3)

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

我对你的编程语言不是很熟悉,所以我不能提供确切的代码,但你应该能够理解。


推荐阅读