正则表达式只返回最后一级括号之间的字符串

问题描述 投票:1回答:3

我有一个JSON返回:

    {
      "status": 1,
      "message": "1",
      "data": {
        "file": "1.png"
      },
      "html": "",
      "redirect_to": ""
    }
<divid="UMS_TOOLTIP"style="position: absolute; cursor: pointer; z-index: 2147483647; background: transparent; top: -100000px; left: -100000px;"></div>

我想清理,只返回内容

{"status":1,"message":"1","data":{"file":"1.png"},"html":"","redirect_to":""}

我试过\{\{([^}]*)\}\},但它似乎在我的测试中没有用。我做错了什么?

javascript jquery json regex
3个回答
3
投票

您可以尝试以下列方式创建组:

  • {开始
  • 可以有任何.*
  • 结束}
  • 并且不使用(?!})跟随任何关闭括号

注意:如果您有许多字符串化对象以及标记,则无法正常工作。例如。 {...}<div>...</div>{...}对于这种情况,这将失败。

var regex = /({.*}(?!}))/;
var str = '{"status":1,"message":"1","data":{"file":"1.png"},"html":"","redirect_to":""}<div id="UMS_TOOLTIP" style="position: absolute; cursor: pointer; z-index: 2147483647; background: transparent; top: -100000px; left: -100000px;"></div>';

console.log(str.match(regex)[0])

2
投票

一种选择是使用XRegExp递归匹配嵌套的{}s,直到它们平衡:

const input = `{"status":1,"message":"1","data":{"file":"1.png"},"html":"","redirect_to":""}<div id="UMS_TOOLTIP" style="position: absolute; cursor: pointer; z-index: 2147483647; background: transparent; top: -100000px; left: -100000px;"></div>`;
const json = '{' + XRegExp.matchRecursive(input, '{', '}') + '}';
// second parameter is the left recursive delimiter
// third parameter is the right recursive delimiter
console.log(JSON.parse(json));
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>

0
投票

假设,您的JSON返回以下内容:

{
    "status":1,
    "message":"1",
    "data":{"file":"1.png"},
    "html":"",
    "redirect_to":""
}
<div id="UMS_TOOLTIP" style="position: absolute; cursor: pointer; z-index: 2147483647; 
background: transparent; top: -100000px; left: -100000px;"></div>

每个人都给出了非常有见地的答案。但是,如果这不是您的程序中非常重要的一步,您可能希望实现此:

var result = `{"status":1,"message":"1","data":{"file":"1.png"},"html":"","redirect_to":""}<div id="UMS_TOOLTIP" style="position: absolute; cursor: pointer; z-index: 2147483647; background: transparent; top: -100000px; left: -100000px;"></div>`;
var retur = result.match('<');
console.log(result.slice(0, retur.index));

你的日志是这样的:

{
    "status":1,
    "message":"1",
    "data":{"file":"1.png"},
    "html":"",
    "redirect_to":""
}

PS:这不是推荐的补丁,但只是完成工作的一种简单方法。

© www.soinside.com 2019 - 2024. All rights reserved.