我对正则表达式还很陌生。是我想要的正常做法,还是我必须做些什么?
我希望获得不在一组花括号之间的每组花括号之间的所有内容。这就是我的意思。
{ 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
我决定重新设计我是如何做事的。我不再需要这个正则表达式,但感谢所有帮助过的人。
答案 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 "]