【发布时间】:2020-08-25 09:00:44
【问题描述】:
我尝试简化 LaTeX 中的嵌套花括号。
换句话说:{ { ... } } | { { { ... } } } |等等→{ ... }
例如有一段TeX如下:
$$\begin{aligned}
\pi &= \frac{1}{2}\sum\limits_{k = 0}^\infty {\frac{1}{{{{16}^k}}}} \left( {\frac{8}{{8k + 2}} + \frac{4}{{8k + 3}} + \frac{4}{{8k + 4}} - \frac{1}{{8k + 7}}} \right)\\
\zeta (2) &= \frac{{{\pi ^2}}}{6} = \frac{3}{{16}}\sum\limits_{k = 0}^\infty {\frac{1}{{{{64}^k}}}} \left( {\frac{{16}}{{{{(6k + 1)}^2}}} - \frac{{24}}{{{{(6k + 2)}^2}}} - \frac{8}{{{{(6k + 3)}^2}}} - \frac{6}{{{{(6k + 4)}^2}}} + \frac{1}{{{{(6k + 5)}^2}}}} \right)\\
\zeta (3) &= \frac{9}{{224}}\sum\limits_{k = 0}^\infty {\frac{1}{{{{4096}^k}}}}
\left(\begin{aligned}
&\frac{{1024}}{{{{(24k + 2)}^3}}} - \frac{{3072}}{{{{(24k + 3)}^3}}} + \frac{{512}}{{{{(24k + 4)}^3}}} + \frac{{1024}}{{{{(24k + 6)}^3}}} + \frac{{1152}}{{{{(24k + 8)}^3}}}\\
+& \frac{{384}}{{{{(24k + 9)}^3}}} + \frac{{64}}{{{{(24k + 10)}^3}}} + \frac{{128}}{{{{(24k + 12)}^3}}} + \frac{{16}}{{{{(24k + 14)}^3}}} + \frac{{48}}{{{{(24k + 15)}^3}}} + \frac{{72}}{{{{(24k + 16)}^3}}}\\
+& \frac{{16}}{{{{(24k + 18)}^3}}} + \frac{2}{{{{(24k + 20)}^3}}} - \frac{6}{{{{(24k + 21)}^3}}} + \frac{1}{{{{(24k + 22)}^3}}}\\
\end{aligned} \right)\\
\end{aligned}$$
大括号可以嵌套,大括号之间可以有空格,但必须成对出现。
我尝试了正则表达式{ *{((?>[^{}]+|{{[^}]*}})*)} *},但它无法匹配所有情况。
如何改进我的正则表达式,或者这不能通过正则表达式完成,我必须编写一个简单的解析器?
【问题讨论】:
-
github.com/slevithan/xregexp 有一个
matchRecursive方法,可以帮助你在这里.. js 不支持需要获得嵌套匹配的子表达式调用.. 对于最多两级嵌套,你可以使用 @ 987654328@,您可以应用两次或将其扩展为三层嵌套 -
如果你只需要将多个
{和}变成单个{和},使用s.replace(/{+/g, '{').replace(/}+/g, '}') -
@WiktorStribiżew,这是错误的,例如
s = '\\frac{{a}b}{c}' -
你用
{{{{(24 + 3)}^3}}}做什么? -
你有问题……你用正则表达式来解决……现在你有两个问题……
标签: javascript regex