如何从字符串中提取带空格的参数比较表达式?
解决方案
你的问题出在正则表达式的开头部分——[a-z0-9\s]+会匹配包含空格的任意字母数字组合,导致把前面的AND 这类无关内容也包含进去。要精准提取{参数}{运算符}{参数}格式的表达式,需要明确各部分的规则:
- 参数名:以字母/数字开头的标识符(无前置空格),用
[A-Za-z0-9]+匹配 - 运算符:支持
==、>=、<=、!=、>、<,注意把多字符运算符放在前面(避免单字符运算符被优先匹配) - 参数值:这里是数字,用
\d+匹配 - 运算符前后的空格是可选的,用
\s*匹配
修正后的代码如下:
let myString = '(A == 3 AND B == 4) OR ( A==1 AND B==2)'; const result = myString.match(/[A-Za-z0-9]+\s*(==|>=|<=|!=|>|<)\s*\d+/gi); console.log(result); // 输出: ["A == 3", "B == 4", "A==1", "B==2"]
如果你的参数值可能包含非数字(比如字符串),可以把\d+替换为\S+(匹配任意非空白字符),但根据你的示例,当前正则已经满足需求。
内容的提问来源于stack exchange,提问作者Evyatar Menczer
相关产品推荐
相关产品推荐

