2015-10-16 60 views
0

我有一個表達式,如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)

我想這個代碼..

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; 
} 
+0

@使用JavaScript – smraj

+0

@tushar它不工作圖莎爾。 – smraj

+0

請列出一些可能的方程式(之前和之後)。我假設我們不只是在談論'x * sin(x)'? – Nerdwood

回答

2

這一個右括號後面有一個字母匹配的*和一切三個字母(例如)s),並插入一個*(如)*s

它還取代x然後用x*一個字母和字母

應該爲x+sin(x)工作,xsin(x)

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)"))

幫助:
JavaScript - string regex backreferences
qwertymk的回答

+0

你是部分正確的。我沒有得到它正確的xsin(x)。 – smraj

+0

現在它是完美的,你是驚人的Josiah.Thanks所有其他人幫助我 – smraj

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

我不確定,但似乎是錯誤的'X +罪(X)' – Grundy

+0

是Grundy你是正確的。它不工作的X +罪(X) – smraj