这个正则表达式可能吗?

时间:2012-12-10 14:26:31

标签: javascript regex

我对正则表达式还很陌生。是我想要的正常做法,还是我必须做些什么?

我希望获得不在一组花括号之间的每组花括号之间的所有内容。这就是我的意思。

{ 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}问题} {this {{would}}}}}}}

修改2

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

3 个答案:

答案 0 :(得分:4)

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

要执行此操作,您必须计算大括号的嵌套级别,但使用正则表达式无法计算任意嵌套。如果您愿意将最大限制为 n 嵌套级别,那么可以这样做。

答案 1 :(得分:2)

你可以这样做但是检查平衡的圆括号是棘手的,但不可能

你可以试试这个

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

使用regex来解决这些问题不是一个好选择。

您最好使用自己的parser ...

答案 2 :(得分: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 "]