正则表达式,用于在等式中的适当位置插入*

时间:2015-10-16 03:26:52

标签: javascript regex

我有一个表达式,例如 xsin(x)只有当*介于x和sin(x)之间时它才有效并使其成为 x * sin(x)

我的想法是首先搜索x然后在x和另一个变量之间插入*,如果有变量的话。

方程

  1. sin(x)cos(x) to sin(x)*cos(x)
  2. pow((x),(2))sin(x)to pow((x),(2))*sin(x)
  3. sin(x)cos(x)tan(x) to sin(x)*cos(x)*tan(x)

  4. 我正在尝试使用此代码..

    function cal(str)
    {
    
      //var string = "3*x+56";
      var regex = /([a-z]+)\(\(([a-z]+)\),\(([0-9]+)\)\)\(([a-z0-9\*\+]+)\)([\*\-%\/+]*)/;
      var replacement = "$1($2($4),($3))$5";
      while(str.match(regex))
        {
          str = str.replace(regex,replacement);
        }
      return str;
    }
    

2 个答案:

答案 0 :(得分:2)

> 'sin(x)cos(x)'.replace(/(?!^)\w{3}/g, '*$&')
< "sin(x)*cos(x)"
> 'pow((x),(2))sin(x)'.replace(/(?!^)\w{3}/g, '*$&')
< "pow((x),(2))*sin(x)"
> 'sin(x)cos(x)tan(x)'.replace(/(?!^)\w{3}/g, '*$&')
< "sin(x)*cos(x)*tan(x)"

这说:替换任何一开始没有开头的东西,有三个字母*和匹配的所有内容

答案 1 :(得分:2)

这个匹配右括号后跟一个字母(例如)s),并插入*(例如)*s

它还会替换x,后跟带x*的字母和该字母

它适用于x+sin(x)xsin(x)

&#13;
&#13;
function addStars(str) {
    return str.replace(/(\))([A-Za-z])/g,function(str, gr1, gr2) { return gr1 + "*" + gr2 }).replace(/x([A-Za-wy-z])/g,function(str, gr1) { return "x*" + gr1 })
}

document.write(addStars("x+sin(x)tan(x)ln(x)+xsin(x)"))
&#13;
&#13;
&#13;

帮助来自: JavaScript - string regex backreferences
qwertymk的答案