如何替换字符串JS

时间:2019-02-10 13:29:36

标签: javascript

我正试图建立一个计算器而陷入困境。 我不知道如何替换最后一个字符(这是一个数学符号)。 例如,如果某人单击“ +”然后单击“-”,则不应将其显示为“ +-”。

我尝试过:

  • inputDisplay.textContent = inputDisplay.textContent.replace(/(\+|\-|\*|\/)$/, this.value);;
  

选择字符串末尾的任何数学运算符,并将其替换为   “ this.value”(也是数学符号)。输出为:“ 1 +-/ + *” ...

  • let lastSymbol = inputDisplay.textContent.slice(-1); inputDisplay.textContent = inputDisplay.textContent.replace(lastSymbol, this.value);
  

console.log(lastSymbol)记录数学符号(一次记录一个),但是当我使用.replace()方法替换'lastSymbol'变量时,数学符号被连接起来,而不是被替换:'1 +-+ * '...

  • let stringWithoutLastCharacter = inputDisplay.textContent.slice(0, -1); inputDisplay.textContent = stringWithoutLastCharacter + this.value;
  

数学符号也串联在一起:'1 +-+'...

我不知道该如何解决,所以我正在寻求帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题不是替换,而是在之前添加当前运算符:

if (!symbols.includes(this.value) ) {
// 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
// display elements consequently    
inputDisplay.textContent += this.value;     
}

相反,您还应该检查运算符并替换为if语句:

if (!symbols.includes(this.value)) {
// 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
// display elements consequently    
   let lastChar= inputDisplay.textContent.length && inputDisplay.textContent.length >0 ?inputDisplay.textContent[inputDisplay.textContent.length] : '';

   if(mathSymbols.includes(this.value)&& mathSymbols.includes(lastChar)){
      inputDisplay.textContent[inputDisplay.textContent.length]=this.value;
   }
   else{
inputDisplay.textContent += this.value;     
   }
}

仅写在电话上,因此请打错输入!

编辑:

我使用了您的一种尝试,因为用最后一个字符的索引替换不起作用。此外,它是... length-1,可以在新版本中看到:

if (!symbols.includes(this.value) ) {
    // 'this' refers to the 'element' in 'arr.forEach(element.....)' (see below)
       let lastChar = inputDisplay.textContent.length && inputDisplay.textContent.length > 0 ? inputDisplay.textContent[inputDisplay.textContent.length-1] : '';
     console.log('inputDisplay.textContent.length: ' + inputDisplay.textContent.length);
     //console.log('last char: ' + lastChar);
       if (inputDisplay.textContent.length>0 && mathSymbols.includes(this.value) && mathSymbols.includes(lastChar)) {
          //inputDisplay.textContent[inputDisplay.textContent.length-1] = this.value; 
         let stringWithoutLastCharacter = inputDisplay.textContent.slice(0, -1);
inputDisplay.textContent = stringWithoutLastCharacter + this.value;
        // console.log('lastCharacter: '+ inputDisplay.textContent[inputDisplay.textContent.length-1]);
           //console.log('this value: ' + this.value);     
       } else {
           // display elements consequently  
        inputDisplay.textContent += this.value; 
        // console.log('else, this value: ' + this.value);    
        }
    }