我有一个表达式,例如 xsin(x)只有当*介于x和sin(x)之间时它才有效并使其成为 x * sin(x)
我的想法是首先搜索x然后在x和另一个变量之间插入*,如果有变量的话。
方程
sin(x)cos(x) to sin(x)*cos(x)
pow((x),(2))sin(x)to pow((x),(2))*sin(x)
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 :(得分: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)
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;