Javascript 将字符串中的最后一个数字设置为负数
我有一个包含不同数学字符的字符串,我想将最后一个数字设为负/正。假设字符串为“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); }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.
我得到的是整个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