【问题标题】:How to extract certain Character from JS String如何从 JS 字符串中提取某些字符
【发布时间】:2021-11-10 15:21:56
【问题描述】:

给定一个表示数学运算的字符串,我想提取它包含的运算,例如:5+4-3 将返回两个 arrays:运算 = [+,-],操作数将是 [5,4,3]

// grab the input and so stuff when user finishes typing

const selectElement = document.querySelector('.formule');
selectElement.addEventListener('change', (event) => {
  const result = document.querySelector('.result');
  segmentFormule(event.target.value);
});


const segmentFormule = function (value){
// first separate operands from operations
    let myOperands = [];
    const formule = new String(value);
    
    // here i extracted the operands into an array, but i couldnt figure out how to extract the operations , so i just hardcoded Addition operation for now.
    
    myOperands=formule.split("+");
    
    let ColoredFormule = "";
    for (var i = 0 ; i < myOperands.length ; i++ ) {
        ColoredFormule += 
        '<span style="color:Red">'+myOperands[i]+'</span> '+'<span style="color:blue">+</span> ';
    }
    document.querySelector('.result').innerHTML = ColoredFormule;
    
    }
<label for="formuleField">Example input: 56+400+300</label>
</br>
<input type="text" class="formule" name="formuleField">
</br>
<div class="result"></div>

我不知道如何从给定的输入中提取操作,感谢任何帮助。

【问题讨论】:

    标签: javascript arrays split


    【解决方案1】:

    使用a regular expression 创建两个使用match 的数组。第一个匹配所有数字,第二个匹配所有数字。

    如果您希望运算符数组map 中的整数超过传入Number 用于回调的数组。

    const str = '5.14 + 4 - 36';
    const operations = str.match(/[^\d \.]/g);
    const operands = str.match(/\d+\.?\d*/g).map(Number);
    console.log(operations, operands)

    【讨论】:

    • 第二场比赛你可能需要/\d+/g
    • 谢谢。好地方@Keith
    • 但是安迪,如果我使用“5.34 + 500”,则“。”将算作一次操作,我将有一个额外的数字,如下所示:[5,34,500]
    • 您应该在问题中包含该信息,但我会看看。
    • @Abdou 回答已更新。
    【解决方案2】:

    您可以将正则表达式与 string.match() 一起使用
    (注意数字是字符串,如果需要数字,则必须转换)

    let value = '56.2+400-300/200*.23'
    
    const operatorsRegex = /[+\-/*]/g
    
    let operators = value.match(operatorsRegex)
    
    console.log(operators) // ['+','-','/','*']
    
    const digitsRegex = /(\d+\.?\d*)|(\.?\d+)/g
    
    let digits = value.match(digitsRegex)
    console.log(digits) // ["56.2", "400", "300", "200", ".23"]

    【讨论】:

    • 知道如何绕过花车吗?例如,使用 3.14 将计算“。”作为一项操作,我的数字将是 [3, 14 , ...rest ]
    • @Abdou 我刚刚进行了更正,所以找到了浮动
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多