Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式,用于将最后一个parenthisis中的子字符串替换为Javascript中三元函数和右前右右右右右右右右括号之间的字符串_Javascript_Regex - Fatal编程技术网

正则表达式,用于将最后一个parenthisis中的子字符串替换为Javascript中三元函数和右前右右右右右右右右括号之间的字符串

正则表达式,用于将最后一个parenthisis中的子字符串替换为Javascript中三元函数和右前右右右右右右右右括号之间的字符串,javascript,regex,Javascript,Regex,我有一根绳子 pow((sin),(2))(4*x+5)+pow((cos),(3))(4*x+3)/pow((tan),(5))(x) 我需要把它作为 pow(sin(4*x+5),2)+pow(cos(4*x+3),3)/pow(tan(x),5) 我尝试的是 1) 将pow之间基于运算符(+、-、/、*)的表达式拆分为单个单元 2) 提取最后一个父项之间的表达式 3) 在pow后的第一个字符串和所有单元的第一个闭合父项之间插入提取的子表达式 我尝试的是:- re="pow((sin)

我有一根绳子

pow((sin),(2))(4*x+5)+pow((cos),(3))(4*x+3)/pow((tan),(5))(x)
我需要把它作为

pow(sin(4*x+5),2)+pow(cos(4*x+3),3)/pow(tan(x),5)
我尝试的是

1) 将pow之间基于运算符(+、-、/、*)的表达式拆分为单个单元

2) 提取最后一个父项之间的表达式

3) 在pow后的第一个字符串和所有单元的第一个闭合父项之间插入提取的子表达式

我尝试的是:-

 re="pow((sin),(2))(4*x+5)+pow((cos),(3))(4*x+3)+pow((tan),(5))(x)";
    re.split(+);
    re.replaceAll("^[()]]{3}","\\(\\)]*\\)");

坦率地说,我对正则表达式是新手。

如果您的计划是对其进行求值,而不是对其进行词汇转换,那么您可以通过定义适当的函数来实现:

function pow(operator, exponent) {
  return function(operand) {
    return Math.pow(operator(operand), exponent);
  };
}

var sin = Math.sin, cos = Math.cos, tan = Math.tan;
var x = 2;

> pow((sin),(2))(4*x+5)+pow((cos),(3))(4*x+3)/pow((tan),(5))(x)
< 0.17654033709528213
函数pow(运算符,指数){
返回函数(操作数){
返回Math.pow(运算符(操作数),指数);
};
}
var sin=Math.sin,cos=Math.cos,tan=Math.tan;
var x=2;
>战力((sin),(2))(4*x+5)+战力((cos),(3))(4*x+3)/战力((tan),(5))(x)
< 0.17654033709528213

我认为正则表达式是处理这个问题的错误工具。您可以在循环中解析表达式并获取内部表达式字符串

按照您想要的方式重新构建它并进行评估

解析算法可能类似于

您可以使用以下正则表达式和替换字符串:

已编辑

正则表达式:
([a-z]+)\([a-z]+)\,\([0-9]+)\([a-z0-9\*\+]+)\([\*\-%\/+]*)

替换表达式:
$1($2($4),($3))$5

检查以下代码:

函数cal()
{
var string=“pow((sin),(2))(4*x+5)+pow((cos),(3))(4*x+3)/pow((tan),(5))(x)”;
变量正则表达式=/([a-z]+)\([a-z]+)\([0-9]+)\([a-z0-9\*\+]+)\([a-z0-9\*\+]+)\([\*\-%\/+]*)/;
var replacement=“$1($2($4),($3))$5”;
while(string.match(regex))
{
string=string.replace(regex,replacement);
}
警报(字符串);
}

cal()完成转换后,您打算做什么?你想评估这个吗?@torazaburo是的,我需要根据+,-…等来评估这个拆分。运算符不会满足你的要求。它还采用类似于表达式的
4*x+5
中出现的运算符。@shanavasm,那么我该如何分割它呢。那么我应该基于(和)之间的运算符进行分割吗?当x作为一般值给出时,为什么0.17654033709528213是它的值。你需要替换x处的任何数值来获得值。javascript处理这一点的方式让我感到困惑。计算它和创建转换的词法形式是两个方面不同的事情。此解决方案针对特定值
x
对其进行评估。如果您希望转换后的词法形式传递给其他人进行求值或作为公式处理以绘制图表等,此解决方案将不起作用。您需要要么使用regexp——这不是一个好主意——要么自己编写一个小解析器,这应该不会那么难,或者也许其他人有一个绝妙的想法。你完全正确,torazaburo我需要从这个方程中绘制一个图表。我需要转换的词法形式。这样我就可以传递到python脚本,获得特定范围的值数组,并使用javascript图表库@chandil03绘制它。你能为更一般化的问题给出答案吗表情。假设我以pow((sin),(2))(4*x+5)的形式提供输入,那么我也应该以表达式pow((sin(4*x+5)),(2))作为输出。如果有帮助,您可以向上投票给我的ans。我不知道为什么这个ans投了2票。我已经投了2票。但是我需要得到更多的分数来反映在你们这边。谢谢你们的帮助