我正在尝试为线性方程组实现解析器,因此我想匹配以下形式的字符串:
2x + 3y = 5
55x + 34s + 9872v = 25
所以,我的正则表达式如下:
/([0-9]+[a-z]\+{0,1})*=[0-9]+/;
但是,它匹配不正确的表达式,例如:
23x + 50 = 35
36x + 5xg = 10
而且我不明白为什么,从我的理解来看,它应该只是一个数字(任意长度),紧随其后的是代表变量的单个字符。
答案 0 :(得分:3)
尝试以下正则表达式。演示是here
(\d*(?<![a-z])[a-z][+-]?)+=\-?\d+
答案 1 :(得分:0)
您需要匹配整个文本,但是正则表达式将返回任何匹配的段。
将表达式修改为/^([0-9]+[a-z]\+{0,1})*=[0-9]+$/
,此处添加^
和$
符号以匹配整个字符串。
console.log("2x+3y=5".match(/^([0-9]+[a-z]\+{0,1})*=[0-9]+$/));
console.log("55x+34s+9872v=25".match(/^([0-9]+[a-z]\+{0,1})*=[0-9]+$/));
console.log("23x+50=35".match(/^([0-9]+[a-z]\+{0,1})*=[0-9]+$/));
console.log("36x+5xg=10".match(/^([0-9]+[a-z]\+{0,1})*=[0-9]+$/));