开发者

Regex remove everything thats outside { }

开发者 https://www.devze.com 2022-12-30 19:09 出处:网络
Regex to remove everything outside the { } for example: before: |loader|1|2|3|4|5|6|7|8|9|{\"data\" : \"some data\" }

Regex to remove everything outside the { } for example:

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

after: {"data" : "some data" }

with @Marcelo's regex this works but not if there are others {} inside the {} li开发者_StackOverflowke here:

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


This seems to work - What language are you using - Obviously Regex... but what server side - then I can put it into a statement for you

{(.*)}


You want to do:

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

(C# syntax, regex should be fine in most languages afaik)


in javascript you can try

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

of course this will not work if "some data" has curly braces so the solution highly depends on your input data.

I hope this will help you

Jerome Wagner


You can do something like this in 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("(?<=^|\\})[^{]+", ""));
    }

The regex is:

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

Basically we match any string that is "outside", as defined as something that follows a literal }, or starting from the beginning of the string ^, until it reaches a literal{, i.e. we match [^{]+, We replace these matched "outside" string with an empty string.

See also

  • regular-expressions.info/Lookarounds
    • (?<=...) is a positive lookbehind

A non-regex Javascript solution, for nestable but single top-level {...}

Depending on the problem specification (it isn't exactly clear), you can also do something like this:

var s = "pre { { { } } } post";
s = s.substring(s.indexOf("{"), s.lastIndexOf("}") + 1);

This does exactly what it says: given an arbitrary string s, it takes its substring starting from the first { to the last } (inclusive).


For those who searching this for PHP, only this one worked for me:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号