用于从逻辑表达式中提取操作数和运算符以及括号的正则表达式
Regular expression to extract operands and operators along with parenthesis from a logical expression
ABC or DEF and ( GHI or JKL)
这里的操作数ABC可以是一个可以包含空格的短语。唯一的运算符是 and
、or
。谁能建议一种获取所有操作数的方法?
我想这样做:
将有一个运算符列表,我将使用它作为参考来查找任何此 \bOPERATOR\b
的第一个索引,然后找到下一个可用 \bOPERATOR\b
的第一个索引并在这两个运算符之间提取一个词(通过根据找到的运算符的长度操纵索引)
我觉得这是蛮力的做法。谁能提出更好的解决方案?我更愿意使用 jQuery.
来完成
var expression = "ABC or DEF and ( GHI or JKL)";
var tokens = expression.split(/ and | or |\(|\)/);
tokens = tokens.filter(function(token) { return token.trim().length > 0; });
解释:
正则表达式将表达式拆分为:
1) "and" 或 "or" 被空格包围(以将这些运算符与单词的一部分区分开来,如 "stand" 或 "fork")。
2) 打开和关闭括号。
对 filter
的调用删除了多余的空字符串和仅包含空格的字符串,如果多个分隔符连续出现(例如 "and" 后跟一个带括号的子表达式,则可能会产生空格) .
var separators = ["\bAND\b" , "\b(\b", "\bOR\b", "\b)\b"];
var operands = expression.split(new RegExp(separators.join('|')));
ABC or DEF and ( GHI or JKL)
这里的操作数ABC可以是一个可以包含空格的短语。唯一的运算符是 and
、or
。谁能建议一种获取所有操作数的方法?
我想这样做:
将有一个运算符列表,我将使用它作为参考来查找任何此 \bOPERATOR\b
的第一个索引,然后找到下一个可用 \bOPERATOR\b
的第一个索引并在这两个运算符之间提取一个词(通过根据找到的运算符的长度操纵索引)
我觉得这是蛮力的做法。谁能提出更好的解决方案?我更愿意使用 jQuery.
来完成var expression = "ABC or DEF and ( GHI or JKL)";
var tokens = expression.split(/ and | or |\(|\)/);
tokens = tokens.filter(function(token) { return token.trim().length > 0; });
解释:
正则表达式将表达式拆分为: 1) "and" 或 "or" 被空格包围(以将这些运算符与单词的一部分区分开来,如 "stand" 或 "fork")。 2) 打开和关闭括号。
对 filter
的调用删除了多余的空字符串和仅包含空格的字符串,如果多个分隔符连续出现(例如 "and" 后跟一个带括号的子表达式,则可能会产生空格) .
var separators = ["\bAND\b" , "\b(\b", "\bOR\b", "\b)\b"];
var operands = expression.split(new RegExp(separators.join('|')));