用来处理字符串的规则
1.只能处理字符串
2.它是一个规则:可以验证字符串是否符合某个规则(test),也可以把字符串中符合规则的内容捕获到(exec/match)
let str = 'good good study, day day up!'
let reg = /\d+/; // 是否包含数字
console.log(reg.test(str)); // false
str = '2019-08-12'
console.log(reg.exec(str)); //把字符串中符合规则的捕获出来
// ['2019', index:0, groups: undefined, input:'原始字符串', length:1]
编写正则表达式
创建方式有两种
//=》字面量创建方式(两个斜杠包起来的,都是用来描述规则的元字符)
let reg1 = /\d+/
//=> 构造函数模式创建, 两个参数: 元字符字符串,修饰符字符串
let reg2 = new RegExp(‘\d+’)
// 正则表达式由两部分组成
// 1. 元字符 —》用来定义规则
// 2. 修饰符
// 1.常用的元字符
// 量词元字符: 设置出现的次数
// * 零到多次
// + 一到多次
// ?零次或者一次
// {n} 出现n次
// {n,} 出现n到多次
// {n, m} 出现n到m次
// 2.特殊元字符: 单个或者组合在一起代表特殊的含义
// \ 转义字符(普通–》特殊 特殊–》普通)
// . 除\n(换行符)以外的任意字符
// ^ 以哪一个元字符作为开始
// $ 以哪一个元字符作为结束
// \n 换行符
// \d 0-9之间的一个数字
// \D 非0-9之间的一个数字
// \w 数字、字母、下划线中的任意一个字符
// \s 一个空白字符(包含空格,制表符,换页符等)
// \t 一个制表符(一个tab键:4个空格)
// \b 匹配一个单词的边界
// x|y x或者y中的一个字符
// 【xyz】x或者y或者z中的一个字符
// 【^xy】除了x或者y以外的任意字符
// 【a-z】指定a-z这个范围中的任意字符【a-z0-9A-Z_】=== \w
// [^a-z] 上一个的取反‘非’
// ()正则中的分组符号
// (?:)只匹配不捕获
// (?=) 正向预查
// (?!) 负向预查
//3. 普通元字符 代表本身含义
// /zhufeng/ 正则匹配的就是“zhufeng”
// 正则表达式常用的修饰符: img
// i => ignoreCase 忽略单词大小写匹配
// m => multiline 可以进行多行匹配
// g => global 全局匹配
// /A/.test(‘lala’) =>false
// /A/i.test(‘lala’) => true
let reg = /^\d/ // 匹配以数字开头的字符串
console.log(reg.test('zhufeng')); // false
console.log(reg.test('2019zhufeng')); // true
console.log(reg.test('zhufeng2019')); // false
let reg = /\d$/ // 匹配以数字结束的字符串
console.log(reg.test('zhufeng')); // false
console.log(reg.test('2019zhufeng')); // false
console.log(reg.test('zhufeng2019')); // true
// ^ $ 都不加, 字符串中包含符合规则的字符即可
let reg = /\d+/;
let reg2 = /^\d+$/; //只能是和规则一致的内容
// 验证手机号码 (11位, 以1开头)
let reg3 = /^1\d{10}$/
console.log(reg3.test(12345678901));
// \ 转义字符 注意:.不是小数点,是除\n以为的任意字符
let reg4 = /^2.3$/
console.log(reg4.test('2.3')); // true
console.log(reg4.test('2@3')); // true
console.log(reg4.test('23')); // false
let reg5 = /^2\.3$/
console.log(reg5.test('2.3')); // true
console.log(reg5.test('2@3')); // false
let str = '\\d' // 将特殊字符当作普通字符串去匹配
let reg = /^\\d$/ // 把特殊字符转换为普通字符
console.log(reg.test(str));
// x|y
let reg = /^(18|19)$/; // 分组的第一个作用,改变处理的优先级
console.log(reg.test('18')); // true
console.log(reg.test('19')); // true
console.log(reg.test('189')); // false
console.log(reg.test('119')); // false
console.log(reg.test('81'));// false
console.log(reg.test('819'));// false
console.log(reg.test('1819'));// false
console.log(reg.test('1189'));// false
// [] 中括号中出现的字符一般都代表本身的含义
// let reg = /^[@+]+$/
// console.log(reg.test('@@')); // true
// console.log(reg.test('@+')); // true
// console.log(reg.test('@')); // true
// console.log(reg.test('+')); // true
// let reg = /^[\d]$/
// console.log(reg.test(9)); // true
// console.log(reg.test('\d')); // false
// console.log(reg.test('d')); // false
// let reg = /^[\\d]$/
// console.log(reg.test(9)); // false
// console.log(reg.test('\d')); // true
// console.log(reg.test('d')); // true
// console.log(reg.test('\\')) // true
// 中括号中不存在多位数
// let reg = /^[18]$/
// console.log(reg.test('1')); // true
// console.log(reg.test('8')); // true
// console.log(reg.test('18')); //false
let reg = /^[10-29]$/ // => 1或者0-2或者9
console.log(reg.test('1')); // true
console.log(reg.test('9')); // true
console.log(reg.test('0')); //true
console.log(reg.test('2')); //true
console.log(reg.test('10')); //false
console.log(reg.test('29')); //false