javascript - JavaScript 正则表达式解析 Latex \frac
问题描述
我正在我的一个数学应用程序中解析 Latex 公式以转换为自定义格式。我的要求是当乳胶公式有一个分数时,即 \frac{a}{b}
必须将其转换为{a}/{b}
以下是我正在使用的正则表达式:
\\frac\{(((?![\{\}]).)*)\}\{(((?![\{\}]).)*)\}
这可以很好地解析一个简单的案例\frac{a}{b}
,但是当我的分数里面有子分数或花括号时,它完全失败了
例如解析这样的复杂字符串:(这种情况下解析器失败)
\frac {(\frac{-b\pm\sqrt{b^2-4ac}}{2a})^{10^{15}_1}}{(\frac{a}{c})^{\frac{s}{d}}}\int_{a}^{b}
以下是我正在使用的完整代码:
function fraction(input) {
while (input.search(/\\frac\{(((?![\{\}]).)*)\}\{(((?![\{\}]).)*)\}/) >= 0) {
input = input.replace(/\\frac\{(((?![\{\}]).)*)\}\{(((?![\{\}]).)*)\}/g, "{$1}/{$3}");
}
if (input.search(/\\frac/) >= 0) {
input = fraction(input);
}
return input;
};
Enter formula: <input id="formula" onblur="console.log(fraction(document.getElementById('formula').value));"/> <button>Go</button>
解决方案
这样的事情可能会为你做:
/\\frac\s*{((?!\\frac{).*?)}{((?!\\frac{).*?)}/
它从内部“原子”替换,frac
直到全部替换。
function fraction(input) {
var re = /\\frac\s*{((?!\\frac{).*?)}{((?!\\frac{).*?)}/,
bMatch = true;
while (bMatch) {
bMatch = false;
input = input.replace(re, function(tot, a, b) {
bMatch = true;
//console.log("[" + a + ", " + b + "]");
return '{' + a + '}/{' + b + '}';
});
}
return input;
}
function doAction() {
console.log(fraction(document.getElementById('formula').value));
}
Enter formula: <input id="formula" value="\frac {(\frac{-b\pm\sqrt{b^2-4ac}}{2a})^{10^{15}_1}}{(\frac{a}{c})^{\frac{s}{d}}}\int_{a}^{b} " onblur="doAction()"/> <button onClick="doAction()">Go</button>
推荐阅读
- django - 从 Django 数据库模型中获取项目
- react-native - 如何在 react native 中将状态变量设置为组件的属性?
- android - 如何为android和ios的appium自动化运行单一代码结构?
- javascript - After passing the value from JavaScript to C#, how to do some automatic operation with it?
- android - 张量流 LSTM 不起作用
- angular - Nativescript procudes bootstrap: StaticInjectorError(AppModule)[EffectSources -> ErrorHandler]:
- sed - 如何在不使用 sed 在保持空间中插入新行的情况下从模式空间追加到保持空间?
- asp.net-mvc - 选择不按它们被选择的顺序出现 - Select2 js
- node.js - index.ejs 与 index.html
- android - android上的离子运行停止工作