我有一个包含不同数学字符的字符串,并且我想使最后一个数字为负/正。假设字符串为“ 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,而不是所有数字的数组。有提示吗?
答案 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