Javascript 将字符串中的最后一个数字设置为负数

Javascript 将字符串中的最后一个数字设置为负数,javascript,arrays,string,Javascript,Arrays,String,我有一个包含不同数学字符的字符串,我想将最后一个数字设为负/正。假设字符串为“100/5*30-60+333”。我想要的结果是“100/5*30-60+(-333)”,我想把它转换回正数(“100/5*30-60+333”) 函数posNeg(){ //hiddenText是一个元素。未显示该元素。 设n=hiddenText.value; n、 分裂(+'); n、 分裂('-'); n、 分裂('*'); n、 分裂(“/”); 控制台日志(n); } 我得到的是整个hiddenText.

我有一个包含不同数学字符的字符串,我想将最后一个数字设为负/正。假设字符串为“100/5*30-60+333”。我想要的结果是“100/5*30-60+(-333)”,我想把它转换回正数(“100/5*30-60+333”)

函数posNeg(){ //hiddenText是一个元素。未显示该元素。 设n=hiddenText.value; n、 分裂(+'); n、 分裂('-'); n、 分裂('*'); n、 分裂(“/”); 控制台日志(n); }
我得到的是整个hiddenText.value,而不是所有数字的数组。有什么建议吗?

首先,我要匹配所有的基本数学运算符以获得它们的顺序:

const operatorsArr = n.match(/\+|\-|\/|\*/g)
然后,拆分字符串:

function posNeg() {
  // hiddenText is a <input> element. This is not shown.
  let n = hiddenText.value;
  n = n.replace(/\+|\-|\/|\*/g, '|');
  n = n.split('|');
  console.log(n);
}
现在,我们可以将两个阵列组合在一起:

let newArr;
for (let i = 0; i < n.length; i++) {
  newArr.push(n[i]);
  if (operatorsArr[i]) newArr.push(operatorsArr[i]);
}

请让我知道您的情况。

要获取数字,您可以使用下面的替换功能和拆分检查代码:

   function posNeg() {
  // hiddenText is a <input> element. This is not shown.
  let n = "100/5*30-60+333";
  n = n.replace('+','|+');
  n = n.replace('-','|-');
  n = n.replace('*','|*');
  n = n.replace('/','|/');
  n=n.split('|');console.log(n);
// to use any caracter from array use it in removeop like example 
// if we have array (split return) have 100 5 30 60 333 we get 100 for example 
// we need to make removeop(n[0]) and that reutrn 100;
// ok now to replace last value to negative in string you can just make 
// var lastv=n[n.length-1];
// n[n.length-1] ='(-'+n[n.length-1])+')';
//var newstring=n.join('');
//n[n.length-1]=lastv;
//var oldstring=n.join('');


}


function removeop(stringop)
{

  stringop = stringop.replace('+','');
  stringop = stringop.replace('-','');
  stringop = stringop.replace('*','');
  stringop = stringop.replace('/','');
return stringop;
}
函数posNeg(){ //hiddenText是一个元素。未显示该元素。 设n=“100/5*30-60+333”; n=n.替换(“+”,“|+”); n=n.替换('-','|-'); n=n.替换('*','|*'); n=n.替换(“/”,“|/”); n=n.split(“|”);console.log(n); //要使用数组中的任何字符,请在类似removeop的示例中使用它 //如果我们有数组(分割返回)有100 5 30 60 333,我们得到100例如 //我们需要使removeop(n[0])和reutrn 100; //现在可以将字符串中的最后一个值替换为负数,只需 //var lastv=n[n.length-1]; //n[n.length-1]='('+n[n.length-1])+'; //var newstring=n.join(“”); //n[n.length-1]=lastv; //var oldstring=n.join(“”); } 函数removeop(stringop) { stringop=stringop.replace('+',''); stringop=stringop.replace('-',''); stringop=stringop.replace('*',''); stringop=stringop.replace('/',''); 返回stringop; } 如果确实需要添加“()”,则可以相应地修改

<script>
function myConversion(){
  var str = "100/5*30-60-333";
  var p = str.lastIndexOf("+");

  if(p>-1)
  {
  str = str.replaceAt(p,"-");
  }
  else
  {
  var n = str.lastIndexOf("-");
  if(n>-1)
  str = str.replaceAt(n,"+");
  }
  console.log(str);
}
String.prototype.replaceAt=function(index, replacement) {
    return this.substr(0, index) + replacement+ this.substr(index + replacement.length);  

}
</script>

函数myConversion(){
var str=“100/5*30-60-333”;
var p=str.lastIndexOf(“+”);
如果(p>-1)
{
str=str.replaceAt(p,“-”);
}
其他的
{
var n=str.lastIndexOf(“-”);
如果(n>-1)
str=str.replaceAt(n,“+”);
}
console.log(str);
}
String.prototype.replaceAt=函数(索引,替换){
返回this.substr(0,索引)+replacement+this.substr(索引+replacement.length);
}
假设字符串为“100/5*30-60+333”。我想要的结果是 “100/5*30-60+(-333)”,我想把它转换回正数 (“100/5*30-60+333”)

以下代码执行以下操作:

let mathStr = '100/5*30-60+333';
console.log(mathStr);
let tokens = mathStr.split('+');
let index = tokens.length - 1;
let lastToken = tokens[index];
lastToken = '('.concat('-', lastToken, ')');
let newMathStr = tokens[0].concat('+', lastToken);
console.log(newMathStr); // 100/5*30-60+(-333)
console.log(mathStr); // 100/5*30-60+333
编辑:

。。。我想把它转换回正数(“100/5*30-60+333”)

一种方法是在开始时将
mathStr
(值为“100/5*30-60+333”)声明为
var
,然后根据需要重新使用它。另一种方法是编码如下:

let str = "100/5*30-60+(-333)";
str = str.replace('(-', '').replace(')', '');
console.log(str); // 100/5*30-60+333

但是你为什么要这样做?那不是本质上的非op吗?我不明白后面的部分;保留原稿。我相信是的,因为他说问题是console.log的输出是完整的输入值。编辑了答案,我相信它现在回答了他的问题。一旦你将其拆分,你如何将其重新组合?
<script>
function myConversion(){
  var str = "100/5*30-60-333";
  var p = str.lastIndexOf("+");

  if(p>-1)
  {
  str = str.replaceAt(p,"-");
  }
  else
  {
  var n = str.lastIndexOf("-");
  if(n>-1)
  str = str.replaceAt(n,"+");
  }
  console.log(str);
}
String.prototype.replaceAt=function(index, replacement) {
    return this.substr(0, index) + replacement+ this.substr(index + replacement.length);  

}
</script>
let mathStr = '100/5*30-60+333';
console.log(mathStr);
let tokens = mathStr.split('+');
let index = tokens.length - 1;
let lastToken = tokens[index];
lastToken = '('.concat('-', lastToken, ')');
let newMathStr = tokens[0].concat('+', lastToken);
console.log(newMathStr); // 100/5*30-60+(-333)
console.log(mathStr); // 100/5*30-60+333
let str = "100/5*30-60+(-333)";
str = str.replace('(-', '').replace(')', '');
console.log(str); // 100/5*30-60+333