使用条件字符串向字符串开头添加/替换运算符

时间:2018-10-03 14:27:11

标签: javascript string lodash

一个question肿的问题,所以我将分步介绍

我有三个变量

let operators: = ['+', '−', '*', '/'];

当前用户输入(我们称其为currentUserInput

newUserInput(无论用户刚刚输入了什么)

我需要:

  1. 查看newUserInput是否包含任何运算符
  2. 如果确实如此,请将其添加到currentUserInput的开头,否则,请将其添加到末尾
  3. 如果currentUserInput开头已经有一个运算符,请用新的替换。

示例

如果currentUserInput+1234 并且用户在输入字段中的任意位置键入/,新的currentUserInput应该是/1234

我一直在使用if(operators.some(function(v) { return newUserInput.indexOf(v) >= 0; }))

对于步骤1,这将给我一个布尔响应,但是我需要将运算符用作响应。

3 个答案:

答案 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"));