正则表达式的解释 - 它是如何工作的?

时间:2012-09-09 18:15:39

标签: jquery regex

我遇到过“REGEX”,但我并不真正理解它所使用的符号。例子......还有更多

rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

我上面用它来做电子邮件验证并且它有效,但正如我所说,我不完全理解它是如何工作的!有没有人有简单的教程或网站来解释它?

因为我会为自己写Float验证。

接受0-9(仅限数字),带小数点(。)和长度= 5。

例如:99.9

5 个答案:

答案 0 :(得分:7)

字符串的开头:

  

^

字符串的这一部分可能包含字符A-Z,a-z,0-9,下划线,连字符和句点。

  

([A-Za-z0-9_ \ - \。])

使用以前的规则集匹配一个或多个字符:

  

+

继续使用'@':

  

\ @

继续一段时间:

  

\。

字符串的这一部分可能包含字符A-Z和a-z,并且长度必须为2,3,4个字符。

  

([A-ZA-Z] {2,4})

字符串结尾:

  

$

答案 1 :(得分:2)

正如您所知,正则表达式是在两个/字符之间定义的。

正则表达式中的第一件事是^字符,表示字符串的开头,所以它不会在中途开始匹配。

然后在大括号()中定义一个组,这允许您构建子模式并返回部分匹配。 []表示在您的案例A-Za-z0-9_\-\.中肯定匹配的字符列表,因此基本上是每个字母,数字,下划线,短划线和点字符。 +表示该组匹配一个或多个出现。

然后@符号与\@匹配,\转义下一个字符,因此忽略默认功能并且字符本身匹配。

然后有另一个组,如第一个,匹配.字符,顶级域名(只有字母长度为2到4)匹配。

$表示字符串的结尾,因此不仅匹配开头。

答案 2 :(得分:1)

  • 封闭/斜杠/定义模式的开始和停止
  • “^”表示字符串的开头
  • 内部的任何内容(括号)将作为单独的组/部分
  • 进行匹配
  • [方括号]内的字符表示“匹配其中任何一个”
  • “+”表示“匹配之前的任何内容,一次或多次”
  • “\ x”表示转义,可以捕获正则表达式语言字符,例如“*”
  • \ @表示“@”字符已转义(并非总是必要)
  • {x,y}表示“匹配之前的任何内容,x到y次”
  • “$”表示字符串结尾

所以,你的模式意味着:

  • 以一个或多个url-safe字符开头的字符串(字母数字,“。”和“_”)
  • 然后是“@”
  • 然后再一个或多个网址安全字符
  • 然后点“。”
  • 最后,拉丁字母表中的2到4个字符(即“com”,“eu”或“info”)

...这是一个电子邮件地址

在这里试验: RegExr

答案 3 :(得分:1)

要获得一个好的教程,您可以从这个link开始。虽然这个链接用关于正则表达式的通用术语来说,但你应该知道(并且链接也解释了)正则表达式语法和不同语言使用的不同正则表达式引擎之间的行为之间存在微妙的变化。

正则表达式的细分是:

  • //封闭斜线表示它是正则表达式。
  • ^$这表示该行的开头和结尾。
  • ([A-Za-z0-9_\-\.])+方括号[]表示一个字符类,它基本上匹配方括号内列出的可能字符中的一个字符。一个+ 此类之外的量词表示此字符类可能重复1次或更多次 倍。在正则表达式中,字符类表示可能是单词的匹配 字符(字母数字或下划线),连字符或点。这个可以 被重写为([-\w.]+)。你可以注意到你不需要 使用反斜杠转义字符类中的特殊字符。对于 电子邮件地址验证,这会尝试匹配“本地部分”。
  • \@这表示电子邮件地址中的费率符号匹配。 这实际上不需要使用反斜杠进行转义。
  • ([A-Za-z0-9_\-\.])+这仅表示与“本地部分”相同 现在它尝试匹配电子邮件的域名地址。
  • \.这表示域与顶级之间的时间段 域。这需要使用反斜杠进行转义,因为句点是a 正则表达式引擎的保留字,表示任何字符 (换行除外)。
  • ([A-Za-z]{2,4})这表示字母不区分大小写的字符串 长度为2到4个字符。这代表了最高级别 域名如com,org等...

因此,上述正则表达式可以更好地写为^([-\w.]+)@([-\w.]+)\.([A-Za-z]{2,4})$+量词放在括号内。使用()的最常见原因是捕获模式的一部分,以便以后可以提取它。因此,如果您需要捕获电子邮件地址的“本地部分”或“域”,捕获重复的字符类比仅匹配正则表达式中的第一个字符更有意义。

您可以在此处RegexPal

查看此正则表达式

至于匹配浮动,已经讨论过here 但是如果你的浮子需要5的精度,那么这是一个完全不同的交易 试试这个使用positive lookahead

^[-+]?(?=\d+(\.\d+)?)(\.?\d){1,5}$

并使用它here

答案 4 :(得分:1)

我可以推荐以下网站:http://www.regex101.com

以下是正则表达式解释的链接:http://regex101.com/r/aE3yB5

您还可以插入测试字符串并测试表达式。

网站将解释任何给定的表达式并在其中发现错误。

我希望这有帮助!