在了解正则表达式前,必须先明白2个概念:字符组,多选结构。

字符组
字符组匹配中括号列出的某个字符。假设我们要搜索grey,但又不确定是否拼写为gray,则可以使用:

/gr[ea]y/

也可以写成

/gr[ae]y/

这是最简单的正则表达式之一。先匹配gr,然后匹配e或者a,以y结束。因此,他最终匹配的是grey和gray。中括号里面的内容称为元字符,表示最小匹配单位。如果啰嗦一点,该正则表达式也可以写成:

/[g][r][ea][y]/

通常情况来说,我们更希望用更短的正则表达式。

多选结构
可以简单理解为,多选结构匹配单词,而字符组正如其名,只匹配某个字符:

/(subject|from)/

这是另一个简单的正则表达式,他表示匹配subject或者from。

小作业
匹配匪警,火警,即119和110。先匹配11,因此写下:

/11/

接下来接一个9或者0。

/11[90]/

这就是正则表达式的基本思路。接下来来一个更有难度的,匹配手机号:
以1开头,然后跟10位数字。

/1[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]/

这是实现了功能,但很啰嗦,接下来我们来进行优化。在正则中,预定了一个很有意思的规则,如果你要匹配1、2、3、4、5中任意一个字符,则可以简写为:

/[1-5]/

中间的连字符表示区间,表示1到5之间的任意数字,包含1和5。如此这般,我们可以简写前方匹配手机号的正则了。

/1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/

简单了很多,但似乎仍然很长。幸好,正则表达式提供了特别有用的元字符\d ,他用来表示任意数字字符。

/1[\d][\d][\d][\d][\d][\d][\d][\d][\d]/

可以进一步精简:

/1\d\d\d\d\d\d\d\d\d\d/

量词

正则表达式中量词非常有用,代表对前方匹配的数量描述,例如,连续出现了5个a:

/a{5}/

等同于:

/aaaaa/

因此,前方匹配手机号的正则以1开头,再匹配10个连续数字。

1\d{10}

验证Email
准备知识:\w 匹配包括下划线的任何单词字符,+号,表示匹配至少一次,\. 表示匹配小数点,而直接书写小数点表示匹配任意字符(除了换行符)。

/^[\w-]+@[\w-]+\.[\w-]+$/

总结

正则表达式,本质就是一个将你的文本描述翻译为一连串符号的过程。
如果想深入学习,推荐《正则表达式第三版》第一章(8页~34页),就足以应付日常90%的需求了。

posted on 2017-10-16 16:38  sonsuguy  阅读(104)  评论(0)    收藏  举报