【问题标题】:JavaScript regular expression to parse Latex \fracJavaScript 正则表达式解析 Latex \frac
【发布时间】:2018-05-03 10:36:20
【问题描述】:

我正在我的一个数学应用程序中解析 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>

【问题讨论】:

    标签: javascript regex latex


    【解决方案1】:

    这样的事情可能对你有用:

    /\\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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 2016-04-24
      相关资源
      最近更新 更多