Javascript 与Kleen正则表达式的差异

Javascript 与Kleen正则表达式的差异,javascript,regex,Javascript,Regex,刚开始欣赏正则表达式,我正在练习 我的问题是关于kleene“*”的解释。我自己想出了一个答案” 但解决办法是: aa+b*c+ or a*b*c* 这两者在行为上有什么不同吗?特别是当我使用javascript时 对不起,我的英语不好。这个问题没有充分的定义,因为没有负面的例子 例如,如果他们在医学院问你“截肢装置的名称是什么”,“一辆车”在技术上是正确的,但可能不是他们想听的(因为许多车祸最终导致断肢的人)。但这个问题是不是医疗专业人员在手术中进行截肢时使用的器械名称是什么”,答案不再是“

刚开始欣赏正则表达式,我正在练习 我的问题是关于kleene“*”的解释。我自己想出了一个答案”

但解决办法是:

aa+b*c+ or a*b*c*
这两者在行为上有什么不同吗?特别是当我使用javascript时


对不起,我的英语不好。

这个问题没有充分的定义,因为没有负面的例子

例如,如果他们在医学院问你“截肢装置的名称是什么”,“一辆车”在技术上是正确的,但可能不是他们想听的(因为许多车祸最终导致断肢的人)。但这个问题是不是医疗专业人员在手术中进行截肢时使用的器械名称是什么”,答案不再是“汽车”


类似地,您的解决方案将适用于所有提供的情况,但不如它们精确。例如,
“cba”
由您的表达式识别,但被它们拒绝(至少不是作为整个字符串的匹配;
a*b*c*
“cba”不匹配“
作为字符串中任何位置的0长度匹配,以及作为
“a”
位的1长度匹配)。就这点而言,
*
也是解决他们问题的有效(但完全不精确)方法。

JavaScript和其他语言中的一般正则表达式行为没有区别。该任务基本上要求您提供与所提供的模式匹配的最严格的正则表达式。它们还提供了另一个答案,表明您也可以使用限制较少的正则表达式来匹配模式。使用提供的模式需要查找的内容如下:

  • 始终存在成对的
    a
    -s:
    aa
    aaaa
  • 有0个或多个
    b
    -s:
    b
    bbbbbb
    ,没有
    b
  • 末尾有一个或多个
    c
    cc
    c
    cc
  • 字母总是按以下顺序排列:
    abc
  • 为了匹配这四个条件,您可以使用很多正则表达式,因此您需要尝试提供最严格的正则表达式,以尽量减少这些示例之外的匹配。即使提供了答案,您仍将匹配无限多个其他字符串

    更严格的正则表达式是:

    ^(aa)+b*c+$
    

    这里,正则表达式要求字符串以
    aa
    开头,以
    c
    结尾。我假设课程仍然没有涉及到
    ^
    $
    ,因此提供的答案不包括这些内容。

    你能给我举个例子吗?我的解决方案可能会失败?为了学习,我将不胜感激:)不能以他们的例子为例。如果他们有一个例子,他们说“它不能匹配一个空字符串”,那么你的解决方案就错了;但他们没有,所以不是。它只允许比他们的解决方案更多的解决方案。事实上,他们甚至在第三段中说了类似的话。您在哪里看到“解决方案是
    aa+b*c+
    a*b*c*
    ”?在输入解决方案的文本框下方。那里有一段文字说“解决上面的任务以继续下一课,或阅读解决方案。”单击解决方案链接有无限多个可能的解决方案;他们只是一些例子。请记住这一点,重新阅读这一页。你可以进入下一页的任何解决方案,让你所有的三个复选标记;e、 g.
    c
    是在所有三个示例中都匹配的另一种模式。(无数可能的解决方案的证明:
    *
    *a*
    *a*a*
    *a*a*
    …将允许您继续。)我明白了,谢谢!你回答了我的问题,并向@Konstantin致敬,因为他给了我一个关于制定更严格的解决方案的想法,你们值得投票:)“在
    JavaScript
    和其他语言中,
    regex
    行为没有什么不同”。。。只要你坚持Kleene star这样的基础。当然,在更高级的功能上存在差异(值得注意的是,JS不支持lookback、递归性、子例程、命名捕获、条件…)@Amadan,我的意思是一般的,并且提供了足够早的教程。如果答案深入解释了不同正则表达式引擎之间可以观察到的所有差异,那么答案将变得太长。你说得对,实现在引擎中引入了差异,但从纯计算理论的角度来看,正则表达式等价于有限自动机,在所有方面都是统一的。是的,但人们所谓的正则表达式(以及regexone计算的)不是理论正则表达式,而且他们不再等同于足总。如果我们在一起,我不会发表这一评论。但你的编辑(“一般”)是我想要的——我不喜欢人们为了简单而对学习者撒谎,但只要他们说“不太好,但你还不需要知道细节”,那就好了。防止当有人试图评估
    /(?@Amadan)时出现各种混乱。我同意,这就是我进行编辑的原因。感谢您指出这一点!
    
    ^(aa)+b*c+$