1.什么是正则表达式:用于匹配字符串中字符组合的模式,在js中,正则表达式是也是对象
2.正则表达式通常用来检索、替换那些符合某个模式(规则)的文本,例如验证表单(匹配)、过滤页面中的一些敏感词(替换)、从字符串中获取我们想要的特定部分(提取)
1.通过调用RegExp对象的构造函数创建
let regexp = new RegExp(/表达式/)
console.log(regexp) // /123/
2.利用字面量创建正则表达式
let regexp = /123/
console.log(regexp)
test():正则对象方法,用于检测字符串是否符合该规则,返回值为true或false
let reg = /123/
console.log(reg.test(123)) //true
console.log(reg.test('xbc')) //false

//只要包含 abc 就可以
let reg = /abc/
console.log(reg.test('abc')) //true
console.log(reg.test('abcd')) //true
//必须以 abc 开头
let reg = /^abc/
console.log(reg.test('abc')) //true
console.log(reg.test('abcd')) //true
console.log(reg.test('cbad')) //false
//只能是 abc
let reg = /^abc$/
console.log(reg.test('abc')) //true
console.log(reg.test('abcd')) //false
//包含里面的任何一个字符都返回true
let reg = /[abc]/
console.log(reg.test('andy')) //true
console.log(reg.test('baby')) //true
console.log(reg.test('red')) //false
//三选一: 只能是a 或者b 或者c 这三个字母才返回 true
let reg = /^[abc]$/
console.log(reg.test('b')) //true
console.log(reg.test('abc')) //false
console.log(reg.test('andy')) //false
//26个小写英文字母任何一个都返回 true
let reg = /^[a-z]$/
console.log(reg.test('a')) //true
console.log(reg.test('y')) //true
console.log(reg.test('A')) //false
console.log(reg.test('abc')) //false
//26个英文字母任何一个都返回 true
let reg = /^[a-zA-Z]$/
console.log(reg.test('a')) //true
console.log(reg.test('y')) //true
console.log(reg.test('A')) //true
console.log(reg.test('abc')) //false
//如果中括号里面有 ^ 表示取反的意思
let reg = /^[^a-zA-Z0-9_-]$/
console.log(reg.test('a')) //false
console.log(reg.test('y')) //false
console.log(reg.test('A')) //false
console.log(reg.test('!')) //true

// *:重复零次或更多次
let reg = /^a*$/
console.log(reg.test('')) //true
console.log(reg.test('a')) //true
console.log(reg.test('aaa')) //true
console.log(reg.test('abc')) //false
// +:重复一次或更多次
let reg = /^a+$/
console.log(reg.test('')) //false
console.log(reg.test('a')) //true
console.log(reg.test('aaa')) //true
console.log(reg.test('abc')) //false
// ?:重复零次或一次。
let reg = /^a?$/
console.log(reg.test('')) //true
console.log(reg.test('a')) //true
console.log(reg.test('aaa')) //false
console.log(reg.test('abc')) //false
// {n}:重复 n 次。
let reg = /^a{3}$/
console.log(reg.test('a')) //false
console.log(reg.test('aaa')) //true
console.log(reg.test('abc')) //false
// {n,}:重复 n 次或更多次。
let reg = /^a{3,}$/
console.log(reg.test('a')) //false
console.log(reg.test('aaa')) //true
console.log(reg.test('aaaaaa')) //true
console.log(reg.test('abc')) //false
// {n,m}:重复大于等于 n 次且小于等于 m 次。
let reg = /^a{3,5}$/
console.log(reg.test('a')) //false
console.log(reg.test('aaa')) //true
console.log(reg.test('aaaaa')) //true
console.log(reg.test('abc')) //false
//量词重复出现
//这个模式用户只能输入英文字母 数字 下划线 短横线 且 6-16 位
let reg = /^[a-zA-Z0-9_-]{6,16}$/
console.log(reg.test('study')) //false
console.log(reg.test('andy-666')) //ture
console.log(reg.test('andy!666')) //false

// \d:匹配 0-9 之间的任一数字,相当于 [0-9]
let reg = /^\d{1,5}$/
console.log(reg.test(123)) //true
console.log(reg.test('aa123')) //false
// \D:匹配所有 0-9 以外的字符,相当于 [^0-9]
let reg = /^\D{1,5}$/
console.log(reg.test('a-!')) //true
console.log(reg.test('777')) //false
// \w:匹配任意的字符、数字和下划线,相当于 [A-Za-z0-9_]。
let reg = /^\w{1,5}$/
console.log(reg.test('a-!')) //false
console.log(reg.test('Aa66_')) //true
// \W:匹配除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]
let reg = /^\W{1,5}$/
console.log(reg.test('!')) //true
console.log(reg.test('Aa66_')) //false
// \s:匹配空格(包括换行符、制表符、空格符等),相当于 [\t\r\n\v\f] 。
let reg = /^\s{1,5}$/
console.log(reg.test(' ')) //true
console.log(reg.test('hi')) //false
// \S:匹配非空格(包括换行符、制表符、空格符等)字符,相当于 [^\t\r\n\v\f]。
let reg = /^\s{1,5}$/
console.log(reg.test(' ')) //false
console.log(reg.test('hi')) //true