如何分割,例如2 + 2,1-1,2 * 1,3 / 1,甚至是2 + -1 a等负片?我能够分割一个操作员而不是其他操作员。
答案 0 :(得分:1)
我首先删除任何空格,然后使用与操作数和匹配的正则表达式,可能类似于/(-?\d+)(\+|\*|\/|-|<<|>>)(-?\d+)/
。使用.match()
调用,并通过测试确保字符串与匹配,您最终得到的结果如下:
function parseItUp(str) {
var result = str.replace(/\s/g,'').match(/(-?\d+)(\+|\*|\/|-|<<|>>)(-?\d+)/)
return result ? result.splice(1) : null
}
console.log(JSON.stringify( parseItUp("2 + 3") ))
console.log(JSON.stringify( parseItUp("2 / -3") ))
console.log(JSON.stringify( parseItUp("-2 * 3") ))
console.log(JSON.stringify( parseItUp("2 - 3") ))
console.log(JSON.stringify( parseItUp("2 - -3") ))
console.log(JSON.stringify( parseItUp("2 << -3") ))
console.log(JSON.stringify( parseItUp("2 >> -3") ))
console.log(JSON.stringify( parseItUp("2 3") )) // returns null because there's no operator
对.splice(1)
的调用是省略数组中的第一项,即整个匹配的字符串。
(JSON.stringify()
仅用于在不滚动的情况下轻松读取控制台输出。)
请注意,这个正则表达式可能会扩展到处理两个以上的操作数,但我会将其作为读者的练习...