正则表达式
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
搜索模式可用于文本搜索和文本替换。
作用:正则表达式是专门用来处理字符串的
- 可以从字符串中 查找 需要的 数据
- 可以从字符串中 获取 需要的 数据
- 可以从字符串中 替换 需要的 数据
正则表达式的定义
- 字面量定义
/…/ 以 / 开头,以 / 结尾
let regex = /[abc]/;
- new RegExp 对象
let regex = new RegExp("[abc]");
或
let regex = new RegExp(/[abc]/);
正则表达式的使用
test()方法
返回 一个 boolean 值, 代表 是否匹配。
let regex = /[abc]/;
var str = "qwerty";
console.log(regex.test(str));
//无匹配元素,所以结果为:false;
let regex1 = /[abc]/;
var str1 = "qawerty";
console.log(regex1.test(str1));
//有匹配元素,所以结果为:true;
exec()方法
let regex = /[abc]/;
var str = "qwerty";
console.log(regex.exec(str));
let regex1 = /[abc]/;
var str1 = "qawerty";
console.log(regex1.exec(str1));
无匹配元素返回:null;
反之则返回一个数组,数组中 存放 的是 正则 匹配的元素。
正则表达式的基本使用规则
-
不用[ ]包裹,如:abc,则表示匹配字符串 abc
-
[ ] 中括号中可以写多个任意字符,代表只匹配一个字符
[abc] : 代表 可以匹配 a , b , c 三个字母中的任意一个字符 ;
[a-z] : 匹配 小写 字母中的任意一个;
[A-Z] : 匹配 大写 字母中的任意一个;
[A-Za-z] : 匹配 所有的 字母中的任意一个;
[0-9] : 匹配 任意一个 数字; -
[^] : 如果 中括号 中, 以 ^ 开头, 代表 非
如:[^0-9] : 匹配 非数字中的任意一个字符; -
元字符
元字符 | 描述 |
---|---|
\d | 匹配任意一个 数字, 等价于 [0-9] |
\D | 匹配 非数字中的任意一个字符 等价于 [^0-9] |
\w | 匹配 字母、数字、和下划线 中的任意一个字符串 等价于 [a-zA-Z0-9_] |
\W | 等价于 [^a-zA-Z0-9_] |
\s | 匹配一个空白字符 (空格 和 Tab制表符产生的空白 |
\S | 匹配 任意一个非空白字符 |
. | 匹配 除 换行符 之外的所有 任意一个 字符 |
\ . | 匹配一个 点 |
匹配多个元素
1.{}表示
字符 | 描述 |
---|---|
{n} | n 是一个非负整数。匹配确定 n 次 例如。‘a{2}’ 不能匹配 “abc” 中的 ‘a’,但是能匹配 “aabc” 中的两个 a。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。请注意在逗号和两个数之间不能有空格。 |
2.贪婪式表达式
字符 | 描述 |
---|---|
* | 匹配前面表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的表达式至少一次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
? | 匹配前面的表达式零次或一次。 |
3.非贪婪式表达式
在贪婪式表达式后 添加一个 ‘?’
4.特殊字符
字符 | 描述 |
---|---|
^ | 如果出现在正则的第一个位置,则代表 以 … 开头 |
$ | 如果出现在正则的尾部,代表 以 … 结尾 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \ ( 和 \ )。 |
| | 或。要匹配 |
5 . 引用
\n : 引用第 n 组的匹配的内容 , n 从 1 开始
let regex = /(a)(.*)\1/;
var str = "aqwaerty";
console.log("结果:",regex.exec(str));
6.命名捕获组
(?< key >\d+) : 将 \d+ 匹配的内容 赋值给 key, 可以通过 exec().groups 来进行获取
7 . 非捕获组匹配
?: famil(?:y|ies) 此时的 小括号 不能算作 分组;