2

我对正则表达式还是很陌生。我想要的东西可以正常做吗,还是我必须做一些诡计?

我想在每组大括号之间获取不在一组大括号之间的所有内容。这就是我的意思。

{ This is {a} test }  { this {is a{ also a } } } test }

我想要一个正则表达式返回

['This is {a} test', 'this {is a{ also a } } } test' ]

这可能吗?

编辑:

我正在用 Javascript 做这个。我需要这个的原因是我得到一个看起来像这样的字符串:

{ user entered value 1} {user entered value 2 }.....

我需要获取所有用户值。我只需要注意用户输入“}”并得到这样的字符串的情况

{这是{a}问题} {这{{会}}}}也是}

编辑 2

我决定重新设计我做事的方式。我不再需要这个正则表达式,但感谢所有帮助过的人。

4

3 回答 3

4

使用标准正则表达式是不可能的。

为此,您必须计算大括号的嵌套级别,但使用正则表达式无法计算任意嵌套。如果您愿意限制最多n 个嵌套级别,那么可以做到。

于 2012-12-10T14:28:29.183 回答
2

You can do it but checking for balanced round brackets is tricky but not impossible

You can try this

{[^}]*({[^}{]*})?[^{]*}
      -----------
           |
           |->starting from the center..

Using regex for such problems is not a good choice..

You are better off with your own parser...

于 2012-12-10T14:44:27.650 回答
0

如果你仍然想这样做,你可以将正则表达式与split函数结合起来返回一个值数组,例如:

str = '{ This is {a} test }  { this {is a{ also a } } } test }{ this }  test }';

这会从字符串中删除第一个和最后一个大括号(使用replace),然后根据} {(右大括号后跟零个或多个空格,然后是左大括号)拆分它

arr = str.replace(/^\s*\{|\}\s*$/g,'').split(/\}\s*\{/);

返回一个数组:

arr = [" This is {a} test ", " this {is a{ also a } } } test ", " this }  test "]
于 2012-12-10T15:08:34.387 回答