正则表达式删除 json 属性

Leo*_*ana 0 javascript regex json dust.js

我想根据它的键删除字符串化 json 的属性,无论它在哪里,无论它的值类型是什么。但是只有当它的值是一个字符串并且它在对象的根级别时才删除它,这对开始来说会很好。我试过这个:

[,]{1}[\s]*?\"attrName\"[ ]*?[:][ ]*?\".*\"[^,]|\"attrName\"[ ]*?[:][ ]*?\".*\"[,]{0,1}
Run Code Online (Sandbox Code Playgroud)

示例:https : //regex101.com/r/PAlqYi/1

但是做这样一个简单的工作看起来很大,它所做的是确保逗号也将被删除,如果 attrName 是第一个属性,最后一个在 json 三个中间的东西。有没有人有更好的主意让这个正则表达式更具可读性?

Ale*_*ins 6

如果你有任何使用解析器的方法,它是一个更稳定和可读的解决方案。正则表达式\s*\"attr\" *: *\".*\"(,|(?=\s*\}))应该更短更好。

例子

我做出了一些改变来提供帮助:

  1. 不要使用这么多字符类,比如[,]. 如果一个字符类中只有一个元素,它应该单独留下。
  2. 仅在需要时使用编号计数。例如:{0,1}是?并且{1}是毫无意义的。
  3. 不是在前一行中搜索逗号以查看它是否是列表的末尾,而是检查}该行是否有后面的行允许您将条件组合在一起。
  4. 最后使用正向前瞻进行搜索,}因此在替换过程中不会将其删除。

使用评论中提到的错误修正进行更新。如果属性是最后一个,则将留下尾随逗号。我发现解决此问题的最简单方法是匹配这两种情况。所以,你必须填写 attr 两次。

(,\s*\"attr\" *: *\".*\"|(?=\s*\}))|(\s*\"attr\" *: *\".*\"(,|(?=\s*\})))

添加测试用例的示例