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

时间:2019-01-02 08:15:03

标签: javascript arrays string

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

function posNeg() {
  // hiddenText is a <input> element. This is not shown.
  let n = hiddenText.value;
  n.split('+');
  n.split('-');
  n.split('*');
  n.split('/');
  console.log(n);
}

我得到的是整个hiddenText.value,而不是所有数字的数组。有提示吗?

4 个答案:

答案 0 :(得分:2)

首先,我将匹配所有基本的数学运算符以获取顺序:

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);
}

然后,您将拥有一个数字数组,可以在其中轻松更改最后一个数字:

n[n.lengh-1] *= -1;

现在我们可以将两个数组组合在一起:

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

最后,您可以重新加入数组以使用您选择的分隔符创建新的String。在此示例中,我使用空格:

newArr = newArr.join(' ')

请让我知道如何解决这个问题。

答案 1 :(得分:0)

获取数字您可以使用替换功能和下面的拆分校验码:

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

答案 2 :(得分:0)

如果您确实需要添加“()”,则可以进行相应的修改

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

答案 3 :(得分:0)

  

假设字符串为“ 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