正则表达式是一种对文本字符串进行验证和格式化的极其强大的方式。通过使用正则表达式,可以用一两行JavaScript代码完成原本需要几十行代码的复杂任务。正则表达式常常被认为是编程中最棘手的部分之一。不过,简单的正则表达式没那么难哦,看看下面这行代码:
var re = /^\w ([\.-]?\w )*@\w ([\.-]?\w )*(\.\w{2,3}) $/;
天哪!这到底是什么?别担心,这只是JavaScript代码中某个函数(这里是validEmail())的一个正则表达式。我们将它分解开并逐段讲解,正则表达式从左向右读。
首先,re仅仅是一个变量。我们将它命名为re,这样在以后使用它时就容易想起它是一个正则表达式。这行代码将re的值设置为等号右边的正则表达式。
正则表达式总是以斜杠(/)开头和结尾(当然,仍然有一个分号,表示JavaScript代码行结束,但分号不是正则表达式的一部分)。斜杠之间的所有内容都是正则表达式的组成部分。
脱字符(^)表示我们要使用这个表达式检查以特定的字符串开头的字符串。如果去掉脱字符,那么即使字符串开头有一堆“垃圾字符”,电子邮件地址也可能被认为是有效的。
表达式\w表示任意单一字符,包括a~z、A~Z、0~9和下划线。电子邮件地址必须以这些字符之一开头。
加号 表示我们要寻找前面条目的一次或多次出现。在这个示例中,电子邮件地址必须以字符a~z、A~Z、0~9或下划线的任意组合开头。
左圆括号(表示一个组。这意味着后面将要引用圆括号中的所有内容,所以现在将它们放在一个组中。
方括号[]用来表示可以出现在其中的任意一个字符。在这个示例中,方括号内包含字符\.-。我们希望允许用户输入点号或连字符,但是点号对于正则表达式有特殊意义,所以需要在它前面加
上反斜杠\,这表示我们指的实际上是点号本身,而不是它的特殊意义。在特殊字符前面使用反斜杠称为“对字符转义”。因为有方括号,输入的字符串在这个位置可以有一个点号或一个连字符,但是两者不能同时存在。注意,连字符不代表任何特殊字符,所以不用加反斜杠。
问号?表示前面的条目可以不出现或者出现一次。所以,在电子邮件地址的第一部分(在@前面的部分)中可以有一个点号或一个连字符,也可以没有。
在?后面,再次使用\w ,这表示点号或连字符后面必须有其他一些字符。
右圆括号)表示这个组结束了。在此之后是一个星号,表示前面的条目(在这个示例中,指圆括号中的所有内容)可以不出现或者出现多次。所以如果dori是有效的电子邮件前缀,testing-testing-1-2-3也是。
@字符仅仅代表它本身,没有任何其他意义,这个字符位于电子邮件地址前缀和域名之间。
再次使用\w ,这表示域名必须以一个或多个a~z、A~Z、0~9或下划线字符开头。在此之后同样是([\.-]?\w )*,表示电子邮件地址的后缀中允许有点号或连字符。
然后,在一对圆括号中建立另一个组:\.\w{2,3},表示我们希望找到一个点号,后面跟着一些字符。在这个示例中,花括号中的数字表示前面的条目(本例中是\w,表示字母、数字或下划线)可以出现2次或3次。在这个组的右圆括号后面是一个 ,也表示前面的条目(这个组)必须出现一次或多次。这会匹配.com或.edu之类的,也与ox.ac.uk匹配。
最后,正则表达式的末尾是一个美元符号$,表示匹配的字符串必须在这里结束。这使脚本能够拒绝那些开头正确,但是在末尾包含垃圾字符的电子邮件地址。斜杠结束正则表达式。分号和原来一样结束JavaScript语句。
怎么样,挺简单吧?如果想更详细地学习,推荐一本书《学习正则表达式》:
戳左下角【阅读原文】跳转到图灵社区试读。
本文转载自:微信公众账号 - 图灵教育,版权归原作者所有! |