无法理解正则表达式

时间:2011-11-20 15:13:43

标签: javascript regex

我理解基本的正则表达式,但是当我看到这样的

/^(28|29|[3-5][7]*[0-9])$/

我无法破译过去某一点意味着什么。我得到的一切都是分开的,但是对我来说没有意义,我也不明白asterik在这个背景下的意思。谁能解释一下?

8 个答案:

答案 0 :(得分:7)

/^(28|29|[3-5][7]*[0-9])$/

首先分开管道,使其匹配:

/^28$//^29$//^[3-5][7]*[0-9]$/

前两个非常明显,无论是28还是29,其他任何东西都不匹配,所以在第三个:

^[3-5]

从数字3,4或5开始

[7]*后跟0-无限量的七人制,直到[0-9]$,这意味着结束 一个数字,包括0到9之间。

答案 1 :(得分:4)

我已经打破了正则表达式并添加了大量的空格和注释来解释它。

^         # Match beginning of string
( 28      # Start group. Match 28
| 29      # OR 29
| [3-5]   # OR a single digit in the range 3-5
  [7]*    # then the digit 7, any number of times
  [0-9]   # then a single digit in the range 0-9
)         # end group
$         # match end of string

来自http://www.regular-expressions.info/repeat.html

*的解释
  

星号或星号告诉引擎尝试将前一个标记匹配零次或多次。

然后继续

  

加号告诉引擎尝试匹配前一个令牌一次或多次。 <[A-Za-z][A-Za-z0-9]*>匹配没有任何属性的HTML标记。尖括号是文字。第一个字符类匹配一个字母。第二个字符类匹配字母或数字。这位明星重复了第二个角色。因为我们使用了星号,所以如果第二个角色类没有匹配则可以。因此,我们的正则表达式将匹配<B>之类的标记。匹配<HTML>时,第一个字符类将匹配H。星号将使第二个字符类重复三次,每一步都匹配TML

方括号(字符类,[...])在http://www.regular-expressions.info/charclass.html

上说明
  

使用“字符类”,也称为“字符集”,您可以告诉正则表达式引擎只匹配多个字符中的一个。只需将要匹配的字符放在方括号中即可。如果要匹配a或e,请使用[ae]。您可以在gr[ae]y中使用此选项来匹配graygrey。如果您不知道您正在搜索的文件是用美国英语还是英国英语写的,那么非常有用。

     

字符类仅匹配单个字符。 gr[ae]ygraaygraey或任何此类内容不匹配。字符类中字符的顺序无关紧要。结果完全相同。

     

您可以在字符类中使用连字符来指定字符范围。 [0-9]匹配0到9之间的单个数字。您可以使用多个范围。 [0-9a-fA-F]匹配单个十六进制数字,不区分大小写。您可以组合范围和单个字符。 [0-9a-fxA-FX]匹配十六进制数字或字母X.同样,字符和范围的顺序无关紧要。

答案 2 :(得分:3)

此正则表达式匹配:

  28
OR
  29
OR
  3, 4 or 5
  optionally followed by 0 or more 7's
  followed by a number from 0-9

答案 3 :(得分:2)

当然:

/^表示行或字符串的开头

(28|29|[3-5][7]*[0-9])分为:

  • 从3个选项中选择:28,29或3-5,7之间的任何字符,任意重复次数,0-9

$/表示行或字符串的结尾

所以*表示任意数量的重复。

对于像这样的问题,我强烈推荐像Expresso这样的程序。

答案 4 :(得分:2)

括号正在创建一个组。管道分隔可能的子匹配(“OR”)。星号等于{0,},表示:尽可能多的出现次数。

/^(28|29|[3-5][7]*[0-9])$/

^      Start of string
(...)  Either:
              28   OR
              29   OR

               [3-5]  One digit, 3-5 followed by
               [7]*   any occurrence of 7, followed by
               [0-9]  One digit
$      End of string

答案 5 :(得分:1)

*(星级)

重复前一项零次或多次。贪婪,因此在尝试使用前一项目的匹配较少的排列之前,将匹配尽可能多的项目,直到前一项目根本不匹配为止。

*? (懒星)

重复前一项零次或多次。懒惰,所以引擎首先尝试跳过上一个项目,然后尝试使用前一项的不断增加的匹配进行排列。

有关详细信息,请参阅此URL:

http://www.regular-expressions.info/quickstart.html

http://www.regular-expressions.info/reference.html

答案 6 :(得分:1)

/^(28|29|[3-5][7]*[0-9])$/

将匹配数字输入如下:

  1. 28或,
  2. 29或,
  3. 3,4或5,然后是0或更多7s,接着是单个数字(0-9)

答案 7 :(得分:1)

这个正则表达式意味着允许的数字如:

  1. 28
  2. 29
  3. 以3到5([3-5])的数字开头的数字的数量>&gt; = 0的7([7]*),然后是0到9的数字({{1} })