我在Javascript中有下面的字符串
var str = "β{;{9}/{(n-7)(n-8)}} ≤ β{;{18({3}/{2})}/{(n-8) 8} ≥ ;{36}/{9.8} ;{9}/{4}}";我需要提取以β符号开头的大括号之间的文本。
即β{text在带{nested}}.的卷曲笔刷中
因此,从上面的str中,我需要提取以下两个基于β{ inside everything}的值
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中失败了
\{((?:[^{}]++|\{(?1)\})++)\}例1:
testinput = "β{test{test{12351}}{a+b}{1/2}}" // Input
testoutput = "{test{test{12351}}{a+b}{1/2}}β"; // output示例2:
testinput = "β{test}" // Input
testoutput = "{test}β"; // output发布于 2022-10-26 21:00:16
由于JavaScript不支持正则表达式中的递归,因此正则表达式的(?1)部分无效(也不支持双加号,但这是不相关的)。
您可以做的是首先计算输入中的开口大括号的数目,这给您一个嵌套深度的上限。然后动态地构造支持嵌套深度的regex:
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);
https://stackoverflow.com/questions/74209309
复制相似问题