正则表达式 - 量化器和捕获组

时间:2018-03-08 14:48:26

标签: javascript regex

有谁知道我为什么要完全匹配" .abcd"在我发布的字符串上使用下面的正则表达式?我想这个正则表达式只能捕获" .abc"作为一个完整的比赛。

^(\.)([a-z]+){3}$

String: .abcd

最好的问候:)

3 个答案:

答案 0 :(得分:5)

引擎可能会按照以下方式使用您的输入:

  • 匹配点,很好
  • 匹配[a-z]+ => abcd =>第一次重复
  • 第二次重复=>没有=>失败!
  • backtrack abcd => abc =>第一次代表
  • 匹配[a-z]+ => d =>第二次代表
  • 3rd rep =>没有=>失败!
  • backtrack abc => ab =>第一次代表
  • 匹配cd =>第二次代表
  • 3rd rep =>没有=>失败!
  • backtrack cd => c =>第二次代表
  • 匹配d =>第三次代表

一般来说,"量化量词"是非常危险的,因为它们涉及大量的回溯,例如, http://www.rexegg.com/regex-explosive-quantifiers.html

答案 1 :(得分:0)

您目前正在说以.开头,然后至少有3个字母结束。

人们,或者至少我,都在阅读正则表达式,但这里有一个很酷的网页,可以将它变成一个流程图https://regexper.com/#%5E%28%5C.%29%28%5Ba-z%5D%2B%29%7B3%7D%24

Image example

答案 2 :(得分:0)

^\.[a-z]{3}$

这是你需要的正则表达式 点后跟三个小写字母