结合Regexp?

nex*_*neo 54 regex

收集用户输入后的各种条件,如

  1. 以..开始 : /(^@)/
  2. 以..结束 : /(@$)/
  3. 包含: /@/
  4. 不包含

如果用户输入多个条件,要制作单个正则表达式,我将它们组合起来,"|"如果它变为1和2/(^@)|(@$)/

此方法到目前为止工作,但是,

我无法正确判断,该条件应该是什么样的正则表达式?结合正则表达式这种方式有效吗?


更新:@(用户输入)对于两个条件不会相同,并且不是所有四个条件总是存在但是它们可能会在未来我可能需要更多条件,例如"确切地"和"完全没有"等等.所以,我我更好奇地知道这种方法会扩大规模吗?

此外,可能存在用户输入清理问题,因此正则表达式正确转义,但现在忽略了.

Ala*_*ore 90

条件是ORed还是AND在一起?

Starts with: abc
Ends with: xyz
Contains: 123
Doesn't contain: 456

OR版本相当简单; 正如你所说,这主要是在各个条件之间插入管道.只要其中一个替代品匹配,正则表达式就会停止寻找匹配.

/^abc|xyz$|123|^(?:(?!456).)*$/
Run Code Online (Sandbox Code Playgroud)

第四种选择可能看起来很奇怪,但这就是你在正则表达式中表达"不包含"的方式.顺便说一下,替代品的顺序无关紧要; 这实际上是相同的正则表达式:

/xyz$|^(?:(?!456).)*$|123|^abc/
Run Code Online (Sandbox Code Playgroud)

AND版本更复杂.在每个单独的正则表达式匹配之后,匹配位置必须重置为零,以便下一个正则表达式可以访问整个输入.这意味着所有条件都必须表达为前瞻(从技术上讲,其中一个不一定是先行,我认为它以这种方式更明确地表达了意图).决赛.*$完成比赛.

/^(?=^abc)(?=.*xyz$)(?=.*123)(?=^(?:(?!456).)*$).*$/
Run Code Online (Sandbox Code Playgroud)

然后有可能结合AND和OR条件 - 这就是真正的乐趣开始的地方.:d

  • 是的,我现在对OR很好.但是感谢你推出AND版本.结合AND和OR不适合我.:) (2认同)