https://c.runoob.com/front-end/854
QQ: [1-9][0-9]{4,} (腾讯qq号从10000开始)
中文昵称2-8位: /^[\u4e00-\u9fa5]{2,8}$/
手机号: /^1[3|4|5|7|8]\d{9}$/
用户名: /^[a-Z0-9_-]{3,16}$/
密码:/^[a-Z0-9_-]{6,18}$/
十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
匹配特殊字符或有特殊搭配原则的字符的最佳选择
reg.test(//)
var reg = /h/g;
var str = 'ddftthrh'
str.replace(reg,'g');//"ddfttgrg"
var reg = /ab/g
var str = "abababab"
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
console.log(reg.exec(str),reg.lastIndex)
直接量(推荐)
new ReExp();
var reg = /abc/i;//直接量创建 i 忽视大小写
var reg = new RegExp('abc','i');//
var reg = new RegExp(/abc/,'i');//
var str = 'abcd';
reg.test(str);// true
i 忽视大小写
g 执行全局匹配(查找所有匹配,而非找到第一个匹配后停止)
m 执行多行匹配
gi 全局匹配+忽略大小写
匹配多行以abc开头的字符串
var str = 'abcddd\nabcghhg\nabcghhg'
var reg = /^abc/gm // 匹配abc开头的字符串
str.match(reg) // ["abc", "abc", "abc"]
var reg2 = /^abc/g // 匹配abc开头的字符串
str.match(reg2) // ["abc"]
[]方括号
用于查找某个范围内的内容
[abc] 查找括号之间的取值范围
查看字符串有没有三位连续的数字
// [0-9] -->[0123456789]
var reg = /[0-9][0-9][0-9]/g;
var str = "1fd78fhjfd9997fdgdfg877nmkkkl";
str.match(reg);//["999", "877"]
尖角 ^
在 [^] 是非,除了什么什么
外面是
var reg = /[^a][^b]/g;//查看字符串2位连续 不是ab的匹配判断
var str = "ab1cd";
str.match(reg);//["b1", "cd"]
()括号
var reg = /(abc|bcd)/g;//查看字符串 匹配abc或bcd
var str = "abcdbcd";
str.match(reg);//["abc", "bcd"]
. 查找单个字符,除了换行和行结束符 . === [^\r\n]
\w 查找单词字符 \w === [0-9A-z_]
\W 查找非单词字符 \W === [^\w]
\d 查找数字字符 \d === [0-9]
\D 查找非数字字符 \D === [^\d]
\s 查找空白字符(空格符,制表符\t,回车符\r,换行符\n,垂直换行符\v,换页符\f) \s === [\n\f\t]
\S 查找非空白字符 \S === [^\s]
\b 匹配单词边界
\B 匹配非单词边界
\0 查找null字符
\n 换行符
\f 换页符
\r 行结束符
\t 缩进符 Tab
\v 垂直换行符
\xxx 查找以八进制数 xxx规定的字符
\xdd
\uxxxx
匹配一切字符
/[\u0000-\uffff]/g
/[\s\S]/
/[\d\D]/
// uxxxx
var reg = /\u56fa\u5b9a\u56fa\u5b9a\u4e2a/g
var str = "固定固定个固定固定个"
str.match(reg);//["固定固定个", "固定固定个"]
// \w === [0-9A-z_]
// \W === [^\w]
var reg = /\w/g;//查看字符串
var str = "abcdbcd";
str.match(reg);//["abcdbcd"]
// \b 单词边界
var reg = /\bklk\b/g
var str = "abc klk lop"
str.match(reg);//["klk"]
// \B [^\b]
var reg = /\bklk\B/g
var str = "abc klklop"
str.match(reg);//["klk"]
贪婪匹配 能匹配多的就不匹配少
var reg = /\w{2,3}/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aaa", "aa"]
非贪婪匹配 能匹配少的就不匹配多
var reg = /\w{2,3}?/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aa", "aa"]
[] 中括号 字符集合
{} 大括号 量词符
() 小括号 表示优先级
用于设定某个模式出现的次数
n+ 匹配任何包含至少一个n的字符串
n* 匹配任何包含0个n或多个n的字符串
n? 匹配任何包含0个n或一个n的字符串
n{x} 匹配包含x个n的序列字符串
n{x,y} 匹配包含x至y个n的序列字符串 中间不要有空格
n{x,} 匹配包含至少x个n的序列字符串
n$ 匹配任意结尾为n的字符串
^n 匹配任意开头为n的字符串
?=n 匹配任意字符其后紧接字符为n的字符
?!n 匹配任意字符其后紧接字符不为n的字符
var reg = /s+/g
var str = "sdsd"
str.match(reg);// ["s", "s"]
var reg = /\w+/g;// \w可以出现一次或多次
var str = "sdsd"
str.match(reg);// ["sdsd"]
// 贪婪匹配 能匹配多个就不匹配少
var reg = /\w*/g;// \w 能识别到 + 最后一个光标定位点
var str = "sdsd"
str.match(reg);// ["sdsd",""]
var reg = /\d*/g; //\d 不能识别到 光标定位点 下一个字符 光标定位点 。。。
var str = "sdsd"
str.match(reg);// ["","","",""]
var reg = /\w?/g;
var str = "aaa"
str.match(reg);// ["a","a","a",""]
var reg = /\w{2}/g;
var str = "aaa"
str.match(reg);// ["aa"]
// 贪婪匹配 能匹配多个就不匹配少
var reg = /\w{2,3}/g; // 匹配包含x至y个n的序列字符串
var str = "aaaaa"
str.match(reg);// ["aaa", "aa"]
var reg = /\w{2,}/g; // 匹配包含至少x个n的序列字符串
var str = "aaaa"
str.match(reg);// ["aaaa"]
var reg = /\w$/g; // 匹配任意结尾为n的字符串
var str = "abcd"
str.match(reg);// ["d"]
var reg = /^abc$/g; // abc既是开头又是结尾
var str = "abc"
str.match(reg);['abc']
// 正向预查 正向断言
var reg = /\w(?=c)/g; // 后面链接c的\w
var str = "abc"
str.match(reg);// ["b"] 后面的b
var reg = /b(?!c)/g; // 后面不链接c的b
var str = "abcbb"
str.match(reg);// ["b","b"]
检验一个字符串首尾是否有数字
var str = "123hjghj8"
var reg = /^\d|\d$/g;//开头或结尾是数字
// /^\d[\s\S]*\d$/g 开头和结尾是数字
str.match(reg);
reg.ignoreCase 正则写了 i 返回true
reg.global 正则写了 g 返回true
reg.multiline 正则写了 m 返回true
reg.source 正则内容
reg.lastIndex 游标
转义字符 \
var str = "abc\"hfgufhui";
console.log(str);// abc"hfgufhui
var str2 = "abc\\hfgufhui";
console.log(str2);// abc\hfgufhui
var str3 = "\
sdad\
dsfsf\
"
换行字符 \n
行结束符 \r
回车代表 \r\n
缩进 \t
var str = "abc\thjkhu";
匹配 xxxx 格式
// \1 反向引用第一个子表达式((\w))引用的内容
var reg = /(\w)\1\1\1/g;
var str = "dddd-ghjhjfgh-kkkk"
str.match(reg);//["dddd", "kkkk"]
匹配 aabb 格式
var reg = /(\w)\1(\w)\2/g;
var str = "ddff-ghjhjfgh-kkkk"
str.match(reg);//["ddff", "kkkk"]
console.log(reg.exec(str))
var reg = /(\w)\1(\w)\2/g;
var str = 'aabb'
str.replace(reg,"$2$2$1$1");//aabb
the-first-name 小驼峰式写法 theFirstName
var reg = /-(\w)/g;
var str = 'the-first-name'
// str.replace(reg,'$1'.toUpperCase()); 无效还是 thefirstname
str.replace(reg,function($,$1){
return $1.toUpperCase()
});// theFirstName
aaaaabbbbbbbbbbbbccccccc — abc
var str = 'aaaaabbbbbbbbbbbbccccccc';
reg = /(\w)\1*/g;
str.replace(reg,'$1');//abc
科学计数法
var str = "10000000000"
var reg = /(?=(\B)(\d{3})+$)/g ; // 空后面跟着 非单词边界 3的位数个 1到多个数字 重后往前($)
str.match(reg)
str.replace(reg,'.');//"10.000.000.000"
匹配 xx-xx 格式
var str = 'xxyyzlkk'
str.match(/\w{2}/g).join('-') //xx-yy-zl-kk
匹配 aa-bb 格式
var str = 'xxyyzzkkjklo'
str.match(/(\w)\1/g).join('-');//"xx-yy-zz-kk"
匹配非 汉字字母数字
var str = 'wer123!@#$_}{||_ =4+'
str.match(/[^A-Za-z0-9\u4e00-\u9fa5]/g)//["!", "@", "#", "$", "_", "}", "{", "|", "|", "_", " ", "=", "+"]
// 排除其它特殊字符 _
var str1 = 'wer123!_____&&&88+4+'
str1.match(/[^A-Za-z0-9_\u4e00-\u9fa5]/g) // ["!", "&", "&", "&", "+", "+"]