文章目录
正则表达式
正则表达式(regular expression): 有一个 RegExp类
正则表达式是用来处理字符串的规则.
- 只能处理字符串
- 它是一个规则:
- 可以验证字符串是否符合某个规则(test).
- 也可以吧字符串当中符合规则的内容捕获到.(exec/match…)
let str = 'good good study , day day up!'; // => 学正则就是用来指定规则 let reg = /\d+/; reg.test(str) // false str = "2019-08-12" console.log(reg.exec(str)); // [ '2019', index: 0, input: '2019-08-12', groups: undefined ]
1.0 编写正则表达式
正则表达式的创建方式有两种:
#1. 字面量方式创建正则 (两个斜杠之间包起来的,都是用来描述正则规则的元字符) let reg = /\d+/; #2. => 构造函数模式创建正则 两个参数: 1. 元字符字符串, 2.修饰符字符串 let reg2 = new RegExp("\\d+"); // 创造类实例的方式
1.1 正则表达式由两部分组成
正则表达式是由两部分组成的:
- 元字符
- 修饰符
1.1.1 元字符
// 常用元字符 几大类 # => 1. 量词元字符: 设置出现的次数 * 零到多次 + 1 到多次 ? 0 次或 1次 { n} 出现 n 次 { n,} 出现 n 到 多次 { n,m} 出现 n 到 m次 # =>2. 特殊元字符: 单个或者组合在一起, 代表特殊的含义 \ 转义字符(普通字符转换为特殊字符, 或者特殊字符转化为普通字符) . 除了 \n(换行符) 以外的任意字符 ^ 以哪一个元字符作为字符串开始 $ 以哪一个元字符作为字符串结束 \n 换行符 \d 0~9 之间的数字 \D 非 0~9 之间的任意字符. \N 除换行符以外的任意字符 \w 数字,字母,下划线中的任意字符. \s 一个空白字符(包含空格, 制表符, 换页符等) \t 一个制表符(一个TAB键) \b 匹配一个单词的边界 x|y x或者y中的一个字符 [xyz] x或者y或者z中的任意 一个字符. [^xy] 除了 x/y 以外的任意字符. [a-z] 指定 a-z 这个范围中的任意字符. [^a-z] 非 a-z的字符 () 正则中的分组符号 (?:) 只匹配不捕获 (?=) 正向预查 (?!) 负向预查 #3=> 普通元字符: 代表本身含义的. /gene/ 此正则匹配的就是 "gene"
1.1.2 修饰符
正则表达式常用的修饰符:
// 正则表达式常用的修饰符: i m g i(ignoreCase) 忽略单词大小写匹配 m(multiline) 可以进行多行匹配 g(global) 全局匹配 console.log(/g/.test('Gene')); // false console.log(/g/i.test('Gene')); // true
2.0 正则表达式元字符详解
2.1 ^和$ 元字符详解
^
字符在正则中的含义:
- 表示以 什么什么字符开始
- 取反, 表示 除了什么什么字符
#比如: /[^a-z\s]/ 会匹配字符串 'good good study, day day up!' 中的 "," , 该正则表示的是匹配 #(除了 a-z和空白字符的字符),因此这里匹配的是 逗号"," const str = 'good good study, day day up!' const reg = /[^a-z\s]/ console.log(str.search(reg)); console.log(str[str.search(reg)]);
3**. 总结一下**
#1. 那什么时候 "^" 表示限定 以什么字符开头? /[(^\s+)(\s+$)]/g (^dog)$ ^(dog)$ #2. 什么时候 "^" 表示 否定? [^a]表示“匹配除了a的任意字符”。 [^a-zA-Z0-9]表示“找到一个非字母也非数字的字符”。 #3. 总结: 经过对比, 我们可以发现, 只要 "^" 这个字符是在中括号 "[]" 中直接使用的时候, 也就是说不包括嵌套分组使用的时候, , 该字符才代表的是 # 对字符反向取非的意思.
^和$
案例详解let reg = /^\d/ console.log(reg.test("Gene")); // false console.log(reg.test("2020-Gene")); // true console.log(reg.test("Gene-2020")); // false
let reg = /\d$/ console.log(reg.test("Gene")); // false console.log(reg.test("2020-Gene")); // false console.log(reg.test("Gene-2020")); // true
#//=> 如果^和$ 两个都不加, 意思是只要字符串中 包含 符合规则的内容即可. let reg = /\d+/ let reg = /