【问题标题】:split on words except when phrase contains that word拆分单词,除非短语包含该单词
【发布时间】:2015-09-21 16:19:50
【问题描述】:

我正在尝试拆分 where 子句,我想拆分 AND|OR|NOT 上的文本,除非 NOT 位于“短语”NOT INNOT LIKEIS NOT NULL 中。

第一个例子:

DEVLDATE IS NOT NULL AND STATUS = D AND PICKUPDATE IS NULL

我希望有 3 个段,在 AND 上拆分,但在这种情况下不在 NOT 上。

第二个例子:

(NOT (STATUS IN ('A','X') )) AND LINEHAUL = 0 

我想在这个NOTAND 上拆分,在这个实例中也期望 3 个段

我正在尝试从另一个几乎相似的示例中向前看,但它根本没有分裂。我的正则表达式经验几乎为零。不确定我错过了什么,或者是否有可能。

提前致谢。

var ignoreRegex = /(?!.*\b([NOT IN]|[NOT LIKE]|[NOT BETWEEN]|[IS NOT NULL])\b)(?=.*\b(AND|OR|NOT)\b)/g
var filterArray = filterBy.split(new RegExp(ignoreRegex));

【问题讨论】:

    标签: javascript jquery regex split


    【解决方案1】:

    尝试:

    \b(AND|OR|NOT(?!\s+NULL|IN|LIKE))\b
    

    DEMO

    关于你的正则表达式:

    (?!.*\b([NOT IN]|[NOT LIKE]|[NOT BETWEEN]|[IS NOT NULL])\b)(?=.*\b(AND|OR|NOT)\b
    
    • [NOT IN] - 这是字符类 [...] 它将匹配字符 你输入的,所以它可以匹配:N,T等。不完整 单词/句子,
    • ([NOT IN]|[NOT LIKE]|[NOT BETWEEN]|[IS NOT NULL]) - 这整个部分实际上只能匹配一个字符,因为它不使用任何量词或间隔,它根本不像你期望的那样工作,
    • 所以整个正则表达式应该匹配:一些带有 AND、OR 或 NOT 的文本,但如果匹配部分的行不包含字符类中包含的字母和空格.....所以它可能不匹配任何内容.

    【讨论】:

    • 领先我一秒...不过我推荐\s+,因为NOTNULL 可能是误报。另外,OP,请随时添加回您的 \b 字边界。
    • @Sam 永无止境的回答比赛:D,你是对的,谢谢你的提示!
    • @m.cekiera 谢谢,谢谢,谢谢!!!也谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多