我正试图建立一个计算器而陷入困境。 我不知道如何替换最后一个字符(这是一个数学符号)。 例如,如果某人单击“ +”然后单击“-”,则不应将其显示为“ +-”。
我尝试过:
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 +-+'...
我不知道该如何解决,所以我正在寻求帮助。 谢谢。
答案 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);
}
}