我一直在尝试使此Regex用于我的React计算器中的格式输入(这应将运算符和运算符限制为有效的数学格式。例如,不应允许将1 ++++ 1替换为1+ 1,应将12 * +-3替换为12-3,依此类推)。正则表达式如下:/ ^ \ d *([/ +-/ =] \ d +) $ / gi。 无论如何努力,我都无法使其正常工作。我不断收到“转义序列”错误。
计算器:
class Calculator extends Component {
constructor(props) {
super(props);
this.state = {value:""}
this.handleClick = this.handleClick.bind(this);
}
handleClick(evt){
const id=evt.target.id;
const result= evt.target.value;
this.setState(prevState => ({
value: `${prevState.value}${result}`.replace(/^0+\B/, "")
}));
if(id==="equals"){
this.setState({value: math.eval(this.state.value)})
}
else if(id==="clear"){
this.setState({value : 0})
}
}
render() {
return(
<div id="container">
<Display value={this.state.value} />
<Button onClick={this.handleClick} id="zero" value={'0'} />
<Button onClick={this.handleClick} id="one" value={'1'} />
<Button onClick={this.handleClick} id="two" value={'2'}/>
<Button onClick={this.handleClick} id="three" value={'3'} />
<Button onClick={this.handleClick} id="four" value={'4'} />
<Button onClick={this.handleClick} id="five" value={'5'} />
<Button onClick={this.handleClick} id="six" value={'6'} />
<Button onClick={this.handleClick} id="seven" value={'7'} />
<Button onClick={this.handleClick} id="eight" value={'8'} />
<Button onClick={this.handleClick} id="nine" value={'9'} />
<Button onClick={this.handleClick} id="decimal" value={'.'} />
<Button onClick={this.handleClick} id="equals" value={'='} />
<Button onClick={this.handleClick} id="clear" value={'clear'} />
<Button onClick={this.handleClick} id="add" value={'+'} />
<Button onClick={this.handleClick} id="subtract" value={'-'} />
<Button onClick={this.handleClick} id="multiply" value={'*'} />
<Button onClick={this.handleClick} id="divide" value={'/'} />
</div>
)
}
显示
const Display = (props) => {
return (
<div>
<h2 id="display">{props.value} </h2>
</div>
)};
按钮
const Button = (props) => {
return (
<input type="button" onClick={props.onClick} id={props.id} value={props.value} />
)
};
答案 0 :(得分:1)
您的逻辑似乎是,如果连续有多个运算符,则您要删除所有运算符符号并仅保留最后一个。我们可以尝试查找以下正则表达式模式:
emit (instance().newMessage(message));
,然后替换为最后捕获的符号。
(?:[+/*-])*([+/*-])