首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javascript中的regex使用嵌套花括号提取值

使用javascript中的regex使用嵌套花括号提取值
EN

Stack Overflow用户
提问于 2022-10-26 14:17:16
回答 1查看 67关注 0票数 1

我在Javascript中有下面的字符串

代码语言:javascript
复制
var str = "β{;{9}/{(n-7)(n-8)}} ≤ β{;{18({3}/{2})}/{(n-8) 8} ≥ ;{36}/{9.8} ;{9}/{4}}";

我需要提取以β符号开头的大括号之间的文本。

β{text在带{nested}}.的卷曲笔刷中

因此,从上面的str中,我需要提取以下两个基于β{ inside everything}的值

代码语言:javascript
复制
str1 = ";{9}/{(n-7)(n-8)}"`
str2 = ";{18({3}/{2})}/{(n-8) 8} ≥ ;{36}/{9.8} ;{9}/{4}"

我尝试了许多regex示例--我发现最接近的例子是来自这个stackover flow link的PHP示例,但它在Javascript中不起作用。

请帮助我,因为模式的PHP语法在Javascript中失败了

代码语言:javascript
复制
\{((?:[^{}]++|\{(?1)\})++)\}

例1:

代码语言:javascript
复制
 testinput = "β{test{test{12351}}{a+b}{1/2}}" // Input
 testoutput = "{test{test{12351}}{a+b}{1/2}}β"; // output

示例2:

代码语言:javascript
复制
 testinput = "β{test}" // Input
 testoutput = "{test}β"; // output
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 21:00:16

由于JavaScript不支持正则表达式中的递归,因此正则表达式的(?1)部分无效(也不支持双加号,但这是不相关的)。

您可以做的是首先计算输入中的开口大括号的数目,这给您一个嵌套深度的上限。然后动态地构造支持嵌套深度的regex:

代码语言:javascript
复制
function extract(str) {
    const count = str.match(/(?<!β){/g)?.length ?? 0;
    const regex = RegExp("(?<=β{)[^{}]*" + "({[^{}]*".repeat(count) + "}[^{}]*)*".repeat(count) + "(?=})", "g");
    return str.match(regex);
}

var str = "β{;{9}/{(n-7)(n-8)}} ≤ β{;{18({3}/{2})}/{(n-8) 8} ≥ ;{36}/{9.8} ;{9}/{4}}";
var parts = extract(str);
console.log(parts);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74209309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档