Установите последний номер в строке на отрицательный - PullRequest
0 голосов
/ 02 января 2019

У меня есть строка с различными математическими символами, и я хочу, чтобы последнее число было отрицательным / положительным.Допустим, строка «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 голосов
/ 02 января 2019

Скажем, строка "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

EDIT:

... и я хочу преобразовать его обратно в положительное значение ("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
0 голосов
/ 02 января 2019

Для получения номеров Вы можете использовать функцию замены и код проверки разделения ниже:

   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;
}
0 голосов
/ 02 января 2019

Если вам действительно нужно добавить «()», то вы можете изменить соответственно

<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>
0 голосов
/ 02 января 2019

Сначала я сопоставлю все основные математические операторы, чтобы получить их порядок:

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

Наконец, вы можете воссоединиться с массивом всоздайте новую строку с разделителем по вашему выбору.В этом примере я использую пробел:

newArr = newArr.join(' ')

Пожалуйста, дайте мне знать, как это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...