在了解正则表达式前,必须先明白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%的需求了。
浙公网安备 33010602011771号