匹配规则
- \d 数字
- \D 除了数字
- + 一个或多个
- . 除换行符外的任何字符
- \. 点字符
- \ 转移
- ? 一个或多个
- \w 字母或数字 或者下划线
- \s 空白
- \S 除了空白
- ^ 限定起始边界
- $ 限定结束边界
- [] 是可以匹配
- i 模式修正符 不区分大小写
- g 模式修正符 全部匹配到
- {2,5} 长度 2 到 5之间
- \b单词边界 具体就是
\w和\W之间的位置
模糊匹配
- 横向模糊 可匹配的字符串的长度不是固定的 实现的方式: 使用量词 {m, n}
- 纵向匹配 在匹配某位字符时, 有多种可能;
-
`[abc]`,表示该字符是可以字符“a”、“b”、“c”中的任何一个 -
`/a[123]b/`可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"
字符组 []
虽然叫字符组(字符类), 但是匹配的是一个字符
- 范围表示 [a-z] 匹配任意小写字母 [0-9]任意数字
- 排除字符组 反义字符组 [^abc] 除a, b, c之外的任意字符
- 常见简写
\d``[0-9]\D[^0-9]除数字外的任意字符\w[0-9a-zA-Z_]表示数字、大小写字母和下划线\W[^0-9a-zA-Z_]非单词字符\s[ \t\v\n\r\f]表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s是space character的首字母。\S[^ \t\v\n\r\f]非空白符。.[^\n\r\u2028\u2029]通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外- 要匹配任意字符怎么办?可以使用
[\d\D]、[\w\W]、[\s\S]和[^]中任何的一个
量词
{m,n}
- 简写形式
{m,}表示至少出现m次。{m}等价于{m,m},表示出现m次?等价于{0,1}0次或一次+等价于{1,},一次或多次*等价于{0,},0次或多次
贪婪匹配与惰性匹配
贪婪匹配
会尽可能多的匹配
var regex = /\w{2,4}/g;
var string = "ab,abc,abcd,abcde";
console.log( string.match(regex) );
// => ["ab", "abc", "abcd", "abcd"]
惰性匹配 尽可能少地匹配
在量词后边加? 实现惰性匹配
var regex = /\w{2,4}?/g;
var string = "ab,abc,abcd,abcde";
console.log( string.match(regex) );
// => ["ab", "ab", "ab", "cd", "ab", "cd"]
`{m,n}?`
`{m,}?`
`??`
`+?`
`*?`
做过的例题
let str = "12aaa"
/^\d/.test(str) //true 是否以数字起始
/^\d$/.test(str)//false 是否以数字起始和结尾
str.match(/[a-z]{3,6}/) //["aaa"] 匹配a-z字符, 3-6位
res = /^[a-z0-9_]{4,16}$/.test(username) 长度为 4到16, 内容为数字, 字母 下划线
/^-?\d+(\.\d+)?$/.test(s) 是否是数字字符 包括了负浮点数情况
'names'.match(/[a-z]{2}/i) 取字符串的前两位字母
'Sam Harris'.match(/\b\w/g) // ['S', 'H']
/^([01][0-9]|[2][0-3]):[0-5][0-9]$/.test("18:30") // true 匹配24小时制时间
/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/.test('2022-04-25') 匹配日期