请解释一些Javascript正则表达式

时间:2011-06-24 03:30:59

标签: javascript regex forms

我正在通过在线教程学习Javascript,但是在那个网站或其他任何我google搜索的地方都没有解释为符号的混乱构成正则表达式。

检查是否所有数字: / ^ [0-9] + $ /

检查是否所有字母: / ^ [a-zA-Z] + $ /

最难的一个:

验证电子邮件: /^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]{2, 4} $ /

所有斜线和美元符号和括号是什么意思?请解释一下。

(顺便说一句,创建一个灵活的网站需要哪些语言?我知道一点Javascript并想学习jQuery和PHP。还需要其他什么吗?)

感谢。

5 个答案:

答案 0 :(得分:3)

http://www.regular-expressions.info/对正则表达式有一个很棒的解释,包括有关语言和实现细节的说明。

答案 1 :(得分:3)

已经有很多很好的网站可以解释正则表达式,所以我将稍微介绍一下你给出的每个具体例子的翻译方式。

检查所有数字:^是否锚定表达式的开头(例如从文本的开头开始)。没有它,可以在任何地方找到匹配。 [0-9]找到该字符类中的字符(例如数字0-9)。字符类之后的+仅表示“一个或多个”。结尾$锚定文本的结尾(例如,匹配应该运行到输入的结尾)。因此,如果将它们放在一起,那么正则表达式将允许字符串中只有1个或更多数字。请注意,锚点很重要,因为没有它们可能会匹配类似“foo123bar”的内容。

检查是否所有字母:与上面几乎相同,但字符类别不同。在此示例中,字符类[a-zA-Z]表示所有小写和大写字符。

最后一个实际上并不比其他两个更难,只是更长。这个答案已经很长了,所以我只会解释新的符号。字符类中的\w将匹配单词字符(每个正则表达式实现定义,但通常至少为0-9a-zA-Z_)。 @之前的反斜杠会转义@,因此它不会被视为正则表达式中的标记。句点将匹配任何字符,因此.+将匹配任何字符中的一个或多个(例如,a,1,Z,1a等)。正则表达式的最后一部分({2,4})定义了一个区间表达式。这意味着它可以匹配至少2个之前的东西,最多4个。

希望你能从上面得到一些东西。

答案 2 :(得分:2)

让我解释一下:

检查是否所有数字:/ ^ [0-9] + $ /

所以,我们首先看到的是开头和结尾的“/”。这是一个分隔符,只用于显示正则表达式的开头和结尾。

接下来,我们有一个“^”,这意味着字符串的开头。 [0-9]表示0-9之间的数字。 +是一个修饰语,它修改了它前面的术语,在这种情况下,它意味着你可以拥有一个或多个东西,所以你可以有一个或多个0-9的数字。

最后,我们以“$”结尾,这与“^”相反,表示字符串的结尾。所以把它们放在一起,它基本上确保在字符串的开头和结尾之间,可以有0-9的任意数字。

检查是否所有字母:/ ^ [a-zA-Z] + $ /

我们注意到这非常相似,但它不是检查数字0-9,而是检查字母a-z(小写)和A-Z(大写)。

最难的一个:

验证电子邮件:/^ [\ - ---] + [@] -ZA-Z0-9.-] +。[ - zA-z0-9] {2,400 $ /

“\ w”表示它是一个单词,在这种情况下,我们可以有任意数量的字母或数字,以及句点意味着它几乎可以是任何字符。

这里的新东西是转义字符。如果没有通过在前面放置斜线来逃避它们,则不能使用许多符号,如“\ @”的情况。这意味着它直接寻找符号“@”。

现在它寻找字母和符号,一个句号(这个似乎是不正确的,它也应该逃避句号,虽然它仍然有效,因为未转义的句号会产生任何符号)。 {}里面的数字意味着前一个术语中有这么多术语,所以[a-zA-Z0-9]中应该有2-4个字符(这部分是网站域名,例如.com ,.ca或.info)。注意这里有另一个错误,[a-zA-z0-9]应该是[a-zA-Z0-9](大写Z)。

哦,看看上面列出的那个网站,它也是一套很棒的教程。

答案 3 :(得分:1)

正则表达式是一个复杂的野兽,正如已经指出的那样,谷歌有很多指南你可以阅读。

回答OP问题:

检查是否所有数字:/ ^ [0-9] + $ /

这里的regexp都用//进行了动画处理,很像字符串引用了''或“”。

^表示字符串或行的开头(取决于您对多行匹配的选项)

[...]被称为角色类。 []中的任何内容都是此位置0-9中该位置的单个匹配字符的列表。减号具有“之间的字符序列”的特殊含义。所以[0-9]表示“0123456789之一”。

+表示前一场比赛的“1个或更多”(在这种情况下为[0-9]),因此一个或多个数字

$表示字符串/行匹配结束。

因此总结一下,找到任何只包含 数字的字符串,即'0123a'将不匹配,因为[0-9]+无法与之前$匹配。

检查是否所有字母:/ ^ [a-zA-Z] + $ /

希望[A-Za-z]现在有意义(A-Z = ABCDEF ... XYZ和a-z abcdef ... xyz)

验证电子邮件:/^ [\ - ---] + [@] -ZA-Z0-9.-] +。[ - zA-z0-9] {2,400 $ /

并非所有regexp解析都知道\w序列。我知道Javascript,java和perl支持它。

我们已经开始讨论'/^,我们正在寻找这个[]匹配 \w - .+。我认为regexp是不正确的。减号应使用\进行转义,或者应该位于[]的末尾(即[\w+.-])。但是,他们基本上试图允许任何 abcdefghijklmnopqrstuvwxyz01234567890 - 。+ 因此fred.smith-foo+wee@mymail.com会匹配但fred.smith%foo+wee@mymail.com不匹配(%[\w.+-]不匹配)。

\@是atsil符号(它是在perl扩展@数组变量引用时被转义)

[a-zA-Z0-9.-]+[\w.-]+相同。非常类似于匹配的用户部分,但与+不匹配。所以这匹配foo.com.google.co.但不匹配my+foo.commy***domain.co.

.表示匹配任何一个字符。这又是不正确的,因为fred @ foo%com会匹配.匹配%*^%$£!等。这应该写成\.

最后一个字符类[a-zA-z0-9]{2,4}在字符类中指定的a-zA-Z0-9的2 3或4之间查找(很像+查找“1更多”{{ 1}}表示至少2个,前一个匹配最多4个。所以'foo'匹配,'11'匹配,'11111'不匹配,'信息'不匹配。

“调整”的正则表达式应为:

/ ^ [\ W + - 。]。+ \ @ [A-ZA-Z0-9 .-] + \ [A-ZA-Z0-9] {2,4} $ /

答案 4 :(得分:0)

我没有在RegEx上做过教程,那是done really well already,但这是你的表达式的意思。

/^<something>$/字符串开头,中间有东西,然后立即结束。

  • /^foo$/.test('foo'); // true
  • /^foo$/.test('fool'); // false
  • /^foo$/.test('afoo'); // false

+一件或多件事:

  • /a+/.test('cot'); //假
  • /a+/.test('cat'); //真
  • /a+/.test('caaaaaaaaaaaat'); //真

[<something>]包括括号中找到的所有字符。 (包括0-9,a-z和A-Z等范围,以及0-9a-zA-Z等的特殊代码_-

  • /^[0-9]+/.test('f00') //假
  • /^[0-9]+/.test('000') //真
X和Y出现之间的

{x,y}

  • /^[0-9]{1,2}$/.test('12'); // true
  • /^[0-9]{1,2}$/.test('1'); // true
  • /^[0-9]{1,2}$/.test('d'); // false
  • /^[0-9]{1,2}$/.test('124'); // false

所以,这应该涵盖所有内容,但是还有很好的衡量标准:

/^[\w-.+]+\@[a-zA-Z0-9.-]+.[a-zA-z0-9]{2,4}$/
至少从\ w,-+.开始。接下来是@,后面跟着一组a-zA-Z0-9.-中的至少一个后跟一个任何的字符(.表示任何内容,它们的意思是\.),其次是由a-zA-z0-9

的2-4个字符组成

作为旁注,这个检查电子邮件的正则表达式不仅过时了,而且非常非常非常不正确。