一个question肿的问题,所以我将分步介绍
我有三个变量
let operators: = ['+', '−', '*', '/'];
当前用户输入(我们称其为currentUserInput
)
和newUserInput
(无论用户刚刚输入了什么)
我需要:
newUserInput
是否包含任何运算符currentUserInput
的开头,否则,请将其添加到末尾currentUserInput
开头已经有一个运算符,请用新的替换。示例
如果currentUserInput
是+1234
并且用户在输入字段中的任意位置键入/
,新的currentUserInput
应该是/1234
我一直在使用if(operators.some(function(v) { return newUserInput.indexOf(v) >= 0; }))
对于步骤1,这将给我一个布尔响应,但是我需要将运算符用作响应。
答案 0 :(得分:0)
因此,除非将运算符作为新输入,否则想法是追加到字符串的末尾?如果他们已经有一个运算符,则替换当前的运算符,否则将其替换。假设您想这样做,请尝试以下代码:
function processInput(currentInput, newUserInput) {
let operators = ['+', '-', '*', '/'];
if(operators.includes(newUserInput)) {
var containsOperator = operators.some(operator => operator == currentInput[0]);
return newUserInput + (containsOperator ? currentInput.substr(1) : currentInput);
} else {
return currentInput + newUserInput;
}
}
console.log(processInput("-string", "+"));
console.log(processInput("-string", "s"));
console.log(processInput("string", "+"));
console.log(processInput("string", "s"));
答案 1 :(得分:0)
此解决方案使用RegExp在字符串的开头或字符串的开头(如果找不到任何运算符)替换运算符。
const operators = ['+', '\\-', '*', '/'].join('');
const searchPattern = new RegExp(`[${operators}]`);
const replacePattern = new RegExp(`(^[${operators}]|^)`);
const replaceOperator = (currentUserInput, newUserInput) => {
const operator = newUserInput.match(searchPattern);
if(!operator) return currentUserInput;
return currentUserInput.replace(replacePattern, operator[0]);
}
console.log(replaceOperator("-string", "+"));
console.log(replaceOperator("-string", "s"));
console.log(replaceOperator("string", "+"));
console.log(replaceOperator("string", "s"));
答案 2 :(得分:0)
这是仅使用includes
和ES6基本字符串操作的另一种方法:
let ops = ['-', '+', '*', '/']
const fn = (c, n) => ops.includes(n) ? ops.includes(c[0]) ? `${n}${c.substr(1)}` : `${n}${c}` : `${c}${n}`
console.log(fn("-string", "+"));
console.log(fn("-string", " and stuff"));
console.log(fn("string", "-"));
console.log(fn("string", " baby"));