使用正则表达式来匹配括号排序和条件

时间:2011-11-29 11:59:48

标签: javascript regex

我想应用正则表达式来查找和替换输入字符串中不需要的括号和运算符。

这是我可能的输入:从a到d的4种类型。 [输入无效]

a). 1 and (2 or 3) ()
b). ( and 2)
c). (or 4)
d). ()

所有这4个都是无效的情况,有效的应该是[有效输入]

a). 1 and 2
b). (1 and 2)
c). 1 and (2 or 4)

根据这个要求,我已经编写了正则表达式,但我已经分为两部分,需要帮助才能将它们连接到一个正则表达式。

a). ([(]+[\s]*[)]+) -> to find the empty parenthesis
b). (([(]+[\s]*[and|or]+[\s]*)) -> to find cases like b or c in invalid inputs.

请建议一种结合上述方法的方法。进一步我想删除输入中的无效部分,我可以在javascript中执行string.replace(regex)。

请分析并对此过程发表评论。

1 个答案:

答案 0 :(得分:1)

/\((\s*|\s*(?:and|or)\s*\d+\s*|\s*\d+\s*(?:and|or)\s*|\s*(?:and|or)\s*)\)/

是一个正则表达式,用于检查括号对的内容:左侧是空的,缺少操作数,右侧是缺少操作数还是根本没有操作数。

但请注意!科林·菲尔德已经提到过,这既没有检查未括号的表达的有效性,也没有检重。如果你想检查一下,我建议从里面替换:

var s = string;
var oneoperator = /^\s*\d+\s*(and|or)\s*\d+\s*$/;
while (true) {
    s = s.replace(/\(([^)])\)/, function(all, inner) {
        if (inner.match(oneoperator)
            return "0"; // or any other valid operand
        else
            throw new SyntaxError("Math Syntax mismatch");
    });
    if (s.match(oneoperator))
        break; // return true
}
// to be improved