返回

硅谷一面:正则表达式速成入门与练习题!

前端

对于所有想在前端领域有所进阶的你来说,正则表达式是绝对绕不过去的一块知识。无论面试的项目要求还是日常的工作需求,正则表达式几乎是所有前后端软件开发者都需要掌握的技能,也是硅谷很多大公司面试必问的考察项。

为什么正则表达式如此重要呢?这主要在于正则表达式可以通过简洁的语法来处理字符串,快速高效地完成字符串的查找、替换、验证等操作。尤其是当你面临大量数据处理时,利用正则表达式,你可以将编程时间大幅压缩。所以说,掌握正则表达式这一技能,也能让你在后续的编程之路上事半功倍。

但是,正则表达式的语法往往让人头疼不已,许多新手都望而却步。没关系!这里我们提供了一个正则速成入门指南,可以帮助你快速入门,并提供大量的练习题,让你巩固所学知识。

正则表达式入门

正则表达式的基本语法包含了以下几个组成部分:

1. 字符匹配

字母、数字、标点符号都可以直接作为字符进行匹配。举个例子,正则表达式 "a" 就会匹配字符串中的任何一个小写字母 "a",而 "1" 将会匹配任何一个数字 "1"。

2. 转义字符

特殊字符通常具有特殊意义,为了能够将这些特殊字符作为普通字符进行匹配,需要使用转义字符 "\”。比如,要匹配一个句号,就需要使用转义字符 "."。常见的转义字符还有:

  • \n:换行符
  • \r:回车符
  • \t:制表符
  • \:反斜杠

3. 量词

量词用于指定要匹配的字符的数量。常用的量词有:

  • *:匹配前一个字符零次或多次。
  • +:匹配前一个字符一次或多次。
  • ?:匹配前一个字符零次或一次。
  • {n}:匹配前一个字符恰好n次。
  • {n,}:匹配前一个字符至少n次。
  • {n,m}:匹配前一个字符至少n次,但不多于m次。

4. 分组

分组用于将正则表达式的一部分括起来,以便以后引用。分组使用小括号 "()" 表示。例如,正则表达式 "(a|b)c" 将会匹配包含字母 "a" 或 "b",后跟字母 "c" 的字符串。

5. 贪婪匹配和懒惰匹配

贪婪匹配和懒惰匹配用于指定正则表达式在匹配字符串时是尽可能多地匹配还是尽可能少地匹配。贪婪匹配使用 "?" 表示,而懒惰匹配使用 "+?" 表示。

正则表达式练习题

1. 匹配一个电子邮件地址

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

2. 匹配一个电话号码

^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

3. 匹配一个日期

^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$

4. 匹配一个IP地址

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

5. 匹配一个URL

^((https|http|ftp)://)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$

6. 匹配一个文件路径

^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*[\w.$]+?\.\w{3,4}$

7. 匹配一个身份证号码

^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

8. 匹配一个银行卡号

^4[0-9]{12}(?:[0-9]{3})?$

9. 匹配一个邮政编码

^[0-9]{6}$

10. 匹配一个汽车牌照号

^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$

掌握了正则表达式,就是掌握了一项在编程界至关重要的技能。不要再为那些写不出的面试题而担忧,也不必为那些改不动的 bug 而头疼了,学会正则表达式,这些通通都能迎刃而解。