正则表达式删除{}之外的所有内容

时间:2010-05-20 09:33:59

标签: javascript regex

正则表达式删除{}以外的所有内容 例如:

之前: |loader|1|2|3|4|5|6|7|8|9|{"data" : "some data" }

后: {"data" : "some data" }

使用@ Marcelo的正则表达式可行,但如果{}中有{}内的其他{}则不行:

"|loader|1|2|3|4|5|6|7|8|9|
   {'data':  
       [ 
         {'data':'some data'}
       ],  
   }"

5 个答案:

答案 0 :(得分:0)

这似乎有效 - 你用的是哪种语言 - 显然是正则表达式......但是服务器方面 - 然后我可以把它放到你的声明中

{(.*)}

答案 1 :(得分:0)

你想这样做:

Regex.Replace("|loader|1|2|3|4|5|6|7|8|9|{\"data\" : \"some data\" }", ".*?({.*?}).*?", "$1");

(C#语法,正则表达式在大多数语言中应该没问题)

答案 2 :(得分:0)

你可以在Java中做这样的事情:

    String[] tests = {
        "{ in in in } out",                 // "{ in in in }"
        "out { in in in }",                 // "{ in in in }"
        "   { in }   ",                     // "{ in }"
        "pre { in1 } between { in2 } post", // "{ in1 }{ in2 }"
    };
    for (String test : tests) {
        System.out.println(test.replaceAll("(?<=^|\\})[^{]+", ""));
    }

正则表达式是:

(?<=^|\})[^{]+

基本上我们匹配任何“外部”的字符串,定义为字符}后面的字符串,或者从字符串^的开头开始,直到达到文字{{1}我们匹配{,我们用空字符串替换这些匹配的“外部”字符串。

另见


非正则表达式Javascript解决方案,适用于可嵌套但单个顶级(?<=...)

根据问题规范(不完全清楚),你也可以这样做:

{...}

这正是它所说的:给定一个任意字符串var s = "pre { { { } } } post"; s = s.substring(s.indexOf("{"), s.lastIndexOf("}") + 1); ,它的子字符串从第一个s开始到最后一个{(包括)。

答案 3 :(得分:0)

在javascript中你可以尝试

s = '|loader|1|2|3|4|5|6|7|8|9|{"data" : "some data" }';
s = s.replace(/[^{]*({[^}]*})/g,'$1');
alert(s);

当然,如果“某些数据”具有花括号,这将无效,因此解决方案在很大程度上取决于您的输入数据。

我希望这会对你有所帮助

Jerome Wagner

答案 4 :(得分:0)

对于那些搜索PHP的人来说,只有这个对我有用:

preg_replace("/.*({.*}).*/","$1",$input);