>开始于:/(^ @)/
>结束于:/(@ $)/
>包含:/ @ /
>不包含
要在用户输入多个条件时生成单个正则表达式,
我将它们与“|”所以如果1和2给定它变成/(^ @)|(@ $)/
这种方法工作到目前为止,
我无法正确确定,应该是正则表达式4的条件?并结合正则表达式这种方式工作?
Update: @(user input) won’t be same
for two conditions and not all four
conditions always present but they can
be and in future I might need more
conditions like “is exactly” and “is
exactly not” etc. so,I’m more curIoUs
to know this approach will scale ?Also there may be issues of user input
cleanup so regex escaped properly,but
that is ignored right now.
Starts with: abc Ends with: xyz Contains: 123 Doesn't contain: 456
OR版本相当简单;正如你所说,它主要是在各个条件之间插入管道的问题。正则表达式只要一个替代匹配就停止寻找匹配。
/^abc|xyz$|123|^(?:(?!456).)*$/
第四个选择可能看起来很奇怪,但这是如何表达“不包含”正则表达式。顺便说一下,替代的顺序无关紧要;这实际上是相同的正则表达式:
/xyz$|^(?:(?!456).)*$|123|^abc/
AND版本更复杂。在每个单独的正则表达式匹配后,匹配位置必须重置为零,以便下一个正则表达式可以访问整个输入。这意味着所有的条件必须被表示为lookaheads(技术上,他们中的一个不必是一个前瞻,我认为它表达的意图更清楚这种方式)。最后。* $完成比赛。
/^(?=^abc)(?=.*xyz$)(?=.*123)(?=^(?:(?!456).)*$).*$/
然后有和AND和OR条件的结合的可能性 – 这是真正的乐趣开始。 :D