四个字母至少有一个"j",优雅和最兼容的正则表达式解决方案?

est*_*est 4 regex

我有这个问题让我头疼:

有没有办法使用正则表达式来测试至少包含字母"J"的4个字符的字符串?这就是我的意思:

^(j...|.j..|..j.|...j)$
Run Code Online (Sandbox Code Playgroud)

是的,我承认它很难看,如果问题改变4个字符到10个字符,或者将"至少一个j"改为"至少有一个j和一个k",那就太疯了

为此编写RegEx的更优雅和兼容的方式是什么?

附加问题:

  1. 如果在学术上没有简单的答案,那么RegExp的限制是什么?为什么它不能解决这样的简单问题?
  2. 任何适合这类任务的DSL?
  3. 对于"至少有一个j和一个k"的10个字符串,最好的RegEx是什么?

Tim*_*ker 9

如果您的正则表达式引擎支持前瞻(大部分都支持),您可以使用

^(?=.*j).{4}$
Run Code Online (Sandbox Code Playgroud)

前瞻(?=.*j)断言,j字符串中有一个地方没有实际消耗匹配的任何字符串.然后,以下.{4}将匹配四个字符的字符串.

^$锚确保该字符串被全部匹配.

如果要添加更多约束,只需添加另一个前瞻:

^(?=.*j)(?=.*k).{10}$
Run Code Online (Sandbox Code Playgroud)

匹配如果字符串中至少有一个j和一个k正好长度为10个字符.等等...