regex - 根据条件从 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 } } }"}
目标是
- 从查询中删除多余的空格
- 两个双引号之间的空格应该在 graphql 查询中保持不变(因为过滤器参数的值将用于匹配我们数据库中的记录)
我们尝试了以下方法:
\s+(?=(?:['|%22](?:\\['|%22]|[^'|%22])+['|%22]|[^'|%22])+$)
在快速文档中给出\s+(?=([^"]*"[^"]*")*[^"]*$)
但这似乎不起作用。
解决方案
我建议分三步进行:
filter
暂时保存;- 进行替换(删除不需要的空格);
- 加回
filter
.
所需的正则表达式变得非常简单(我猜更快,因为您不需要前瞻或其他技巧)。
选择:
将字符串分成 3 部分:
- 之前
filter
; filter
;- 之后
filter
。
在“之前”和“之后”字符串中进行替换。加入最后的部分。
用于拆分的正则表达式可能如下所示:
(.*?)(filter: {[^}]*})(.*)
使用以下内容重建最终字符串:
removeSpaces(group1) + group2 + removeSpaces(group3)
removeSpaces()
实际上替换\s+
为
. 如果要保留新行 ( \n
),请替换 +
为
.
我对你的编程语言不是很熟悉,所以我不能提供确切的代码,但你应该能够理解。
推荐阅读
- r - 重新排列两列,使相似的元素在一列中
- jquery - 防止 jQueryUI 可排序项目在排序完成之前移动和移动
- javascript - 为什么会出现这个错误?users.map 不是函数
- wordpress - ACF - 图库字段 -> 反向查找以查找该图像在图库字段中的所有帖子
- python - 如何只关闭一个特定打开的 docx 文件?
- javascript - Javascript:从对象中提取键值对并将它们组合在一个对象数组中
- c# - WCF 非域系统
- reactjs - 在 NextJS 中丢失 threejs 上下文
- javascript - 在 Socket.io 回调中解析一个 Promise 会返回一个对不会被垃圾回收的变量的引用
- aspose - Aspose.Word 将 DOCX 转换为 HTML 会丢失 MERGEFIELD、IF 条件、页眉和页脚、表格单元格宽度