首页 > 解决方案 > 正则表达式从匹配组中取反

问题描述

我正在尝试使用正则表达式来匹配除“id”之外的任何内容:数字部分

我想出了这个 "(\b(id":)(\d+)\b)" 来找到 id:byDigits 模式,但我需要否定它但无法绕过它。

    [{"age":1,"id":123,"value":"14"},
     {"age":1,"id":4214,"value":"4324"},
    {"age":3,"id":4244,"value":"545"}]

任何帮助表示赞赏。

标签: regexregex-negation

解决方案


最简单的选择是将字符串的其余部分捕获到组中,并在替换中使用它,如下所示

演示: https ://regex101.com/r/cRVA5C/2/

图案: ^([\s\S]*?)\s*"id":\d+,?\s*([\s\S]*?)$

分解:

  • ([\s\S]*?): 匹配前后任意数量的任意字符"id":。将其分组\1\2
  • \s*"id":\d+,?\s*: 匹配"id"=\d+,前面可选空格,后面可选空格,.
  • 作为替代,使用\1\2, 来获得所需的输出。

注意: Regex 可能不是解析 JSON 的理想工具。


推荐阅读