知识点
常见的正则表达式分类:
-
匹配字符:
- 字面量匹配:例如
/abc/匹配字符串中的 "abc"。 - 字符类:例如
/[a-z]/匹配小写字母。 - 反义字符类:例如
/[^0-9]/匹配非数字字符。 - 转义字符:例如
/./匹配句点字符。
- 字面量匹配:例如
-
位置匹配:
- 开始和结束匹配:例如
/^abc/匹配以 "abc" 开头的字符串。 - 单词边界匹配:例如
/\bword\b/匹配单词 "word"。 - 忽略大小写匹配:例如
/pattern/i匹配不区分大小写的 "pattern"。
- 开始和结束匹配:例如
-
重复和数量限定:
- 重复次数:例如
/a{2,4}/匹配连续出现 2 到 4 次的 "a"。 - 零次或更多次:例如
/a*/匹配零个或多个 "a"。 - 一次或更多次:例如
/a+/匹配一个或多个 "a"。 - 零次或一次:例如
/a?/匹配零个或一个 "a"。
- 重复次数:例如
-
分组和捕获:
- 分组:例如
/(abc)/创建一个分组来匹配 "abc"。 - 捕获:例如
/(\d+)/在匹配的文本中捕获一串数字。
- 分组:例如
-
反向引用:
- 反向引用:例如
/([a-z])\1/匹配连续重复的小写字母。
- 反向引用:例如
-
预查:
- 正向预查:例如
/(?=pattern)/匹配紧跟着某个模式的位置。 - 负向预查:例如
/(?!pattern)/匹配不紧跟着某个模式的位置。
- 正向预查:例如
题目
1. 驼峰转换
给一个连字符串例如:get-element-by-id转化成驼峰形式。
str.replace(/-\w/g, ($0) => { return $0.slice(1).toUpperCase(); })
2. 匹配数字
- 二进制
/^[01]$/g.test('01010101')
- 非零的十进制
/^[1-9][0-9]?$/g.test('29')
- 月份
/^(0?[1-9]|1[0-2])$/.test('12')
- 固定电话号码
/\(?0\d{2}[) -]?\d{8}/g.test("000-12344562")
(? 匹配左括号一次或0次然后以0开头后面加两个数字,再匹配右括号或空格或减号一次或0次,随后匹配8个数字
- 非负整数
/^\d+$/g.test("101")
3. ip地址
/(?:\d{1,3}.){3}\d{1,3}/.test('192.168.0.1')
(?:) 是非捕获分组的语法。它用于创建一个子模式,在匹配过程中不会被保存到结果中的匹配组中
4. 标签
- a标签
/<a[^>]+>/g.test("<a herf='www.baidu.com'>")
- 标签
/<[^<>]+/g.test("<a herf='www.baidu.com'>")
5. 千分位
"12345678901".replace(/(\d)(?=(\d{3})+$)/g, '$1,')
(?=...) 是一个特殊的语法,表示正向预查(positive lookahead)。它用于在匹配位置之后,断言该位置后面的内容满足某种条件。
6. 密码
由数字、26个英文字母或者下划线组成的字符串
/^[0-9a-zA-Z_]{1,}$/g.test("111ww_")
6. trim
首尾空格去掉
" 111 ".replace(/^\s+|\s+$/g, '')