资源:
HackerRank 正则练习
Regexper 正则可视化
面试中会遇到的正则题
正则表达式练习题
匹配连续出现的四组以 .
连接的字符串
题目:abc.dss.sds.wer
答案:/^(.{3}\.){3}.{3}$/g
或者 ^(...\.){3}...$
^
以什么作为开头$
以什么作为结尾.
表示匹配任意字符\.
转义表示匹配.
字符本身
匹配数字而非数字
题目:xxXxxXxxxx
答案:/(\d{2}\D){2}\d{4}/
\d
表示匹配一个数字\D
表示匹配非数字字符()
表示一个分组{2}
表示重复匹配两次
匹配空白符
题目: SSsSSsSS
答案:(\S{2}\s){2}\S{2}
\S
表示非空白符(\r\n\t\f
)都是空白符\s
表示空白符
匹配单词字符
单词字符包括从 a-z A-Z 0-9
和 _
\w
匹配单词字符\W
匹配非单词字符
边界匹配,以什么开始,以什么结束
^\d\w{4}\.$
匹配以数字开头的一个字符,连续四个单词字符,以 .
结束的字符串
转换为驼峰命名
var s1 = "get-element-by-id";
给定这样一个连字符串,写一个function
转换为驼峰命名法形式的字符串 getElementById
1 | var s1 = 'get-element-by-id' // getElementById |
判断字符串是否包含数字
1 | var s1 = 'arhs 23jyfhahr 234 ag' |
判断电话号码
1 | var s1 = '13898762123' |
判断是否符合指定格式
给定字符串 str,检查其是否符合如下格式
XXX-XXX-XXXX,其中 X 为 Number 类型
1 | var s1 = '234-234-2342' |
判断是否符合 USD 格式
给定字符串 str,检查其是否符合美元书写格式
- 以 $ 开始
- 整数部分,从个位起,满 3 个数字用 , 分隔
- 如果为小数,则小数部分长度为 2
- 正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3**
1 | var s1 = '$1,023,032.03' |
JS 实现千位分隔符
1 | function format(number) { |
获取 url 中的参数
replace()
方法返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式,
替换值可以是一个字符串或者一个每次匹配都要调用的函数。
⚠️ 返回新的字符串,而原来的字符串不会被改变。如果第二个参数是个函数,那么函数的返回值将会替换字符串中匹配到的元素,如果第一个参数是个正则,且是全局匹配模式,那么该函数将会被多次调用,每次匹配到元素都会被执行。
replace()
参数:
1 | function replacer(match, p1, p2, p3, offset, string) { |
1 | function getUrlParam(url, key) { |
验证邮箱
1 | // 'luoyecong@aliyun.com' |
验证合法身份证号
1 | // 身份证号码可能为15位或18位,15位为全数字,18位中前17位为数字,最后一位为数字或者X |
匹配汉字
1 | var regx = /^[\u4e00-\u9fa5]{0,}$/ |
⚠️ 这种匹配汉字的方法并不严谨,正确的方法是通过正则的底层提供的校验,但是需要 babel 的协助,还有汉字并不包括标点,具体请参看
JavaScript 正则表达式匹配汉字
去除首尾的’/‘
1 | // 以一个或者多个 / 开始或者以一个或者多个 / 结束的 |
判断日期格式是否符合 ‘2017-05-11’的形式,简单判断,只判断格式
1 | var regx = /^\d{4}\-\d{1,2}\-\d{1,2}$/ |
判断日期格式是否符合 ‘2017-05-11’的形式,严格判断(比较复杂)
1 | var regx = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/ |
IPv4 地址正则
1 | var regx = /^(?:(?: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]?)$/ |
十六进制颜色正则
1 | var regx = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/ |
车牌号正则
1 | var regx = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/ |
过滤 HTML 标签
1 | // 匹配一对<> 内不包括 <> 的 |
密码强度正则,最少 6 位,包括至少 1 个大写字母,1 个小写字母,1 个数字,1 个特殊字符
1 | // 连续使用前瞻,匹配多个符合要求的分组,在每个分组中,任意字符、字母、数字、特殊字符 |
URL 正则
1 | var regx = /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ |
匹配标签内数据,包括标签
1 | // <OPTION value="待处理">待处理</OPTION> |