##正则表达式(Regular Expression)
课堂主题
1)正则的创建
2)正则的匹配方法
3)元字符
4)字符集合
5)边界
6)分组
7)反向引用
8)数量词汇
9)匹配模式
课堂目标
- 理解正则中的基础知识
- 理解正则中的各种概念
- 会使用正则查找替换字符
- 能使用正则在实际中运用
知识点
###字符串操作
- 查找字符串中的数字;
- 正则如何如实现
正则的创建
- 字面量创建
- 通过构造函数
正则的匹配方法
字符串方法
- match
- search
- replace
- split
正则对象下的方法
- test
- exec
元字符
- 正则表达式中有特殊含义的非字母字符;
字符类别(Character Classes)
- .
- 匹配行结束符(\n \r \u2028 或 \u2029)以外的任意单个字符
- 在
字符集合(Character Sets)
中,. 将失去其特殊含义,表示的是原始值
- \
- 转义符,它有两层含义
- 表示下一个具有特殊含义的字符为字面值
- 表示下一个字符具有特殊含义(转义后的结果是元字符内约定的)
- 表示下一个具有特殊含义的字符为字面值
- 转义符,它有两层含义
- \d 匹配任意一个阿拉伯数字的字符
- \D 匹配任意一个非阿拉伯数字的字符
- \w 匹配任意一个(字母、数字、下划线)的字符
- \W 匹配任意一个非(字母、数字、下划线)的字符
- \s 匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格
- \S 匹配一个非空白符
- \t 匹配一个水平制表符(tab)
- \r 匹配一个回车符(carriage return)
- \n 匹配一个换行符(linefeed)
- \v 匹配一个垂直制表符(vertical tab)
- \f 匹配一个换页符(form-feed)
字符集合
[xyz]
- 一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符’-'指定一个范围
[xyz]
是一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 ‘-’ 指定一个范围内的字符
边界
- ^
- 匹配输入开始。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处
- $
- 匹配输入结尾。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处
- \b
- 匹配一个零宽单词边界(zero-width word boundary)
- \B
- 匹配一个非零宽单词边界(zero-width word boundary)
###分组
-
(子项)
- 可以使用 () 对表达式进行分组,类似数学中分组,也称为子项
- 索引分组
- 命名分组
- (?…)
- groups属性
- 捕获匹配
- 具有捕获(capturing)特性,即会把匹配结果保存到(子项结果)中
- (x)
- 非捕获匹配
- 不具有捕获(capturing)特性,即不会把匹配结果保存到(子项结果)中
- (?:x)
- 零宽断言/预查(Assertions)
- 用于指定查找在某些内容(但并不包括这些内容)之前或之后的内容
- 正向零宽断言/预查
- 肯定
- (?=pattern)
- 否定
- (?!pattern)
- 肯定
- 负向零宽断言/预查(注意:ES2018新增)
- 肯定
- (?<=pattern)
- 否定
- (?<!patten)
- 肯定
- 捕获与零宽断言的区别
- 捕获:匹配的内容出现在结果中但不出现在子项结果中
- 零宽断言:完全不会出现在结果
反向引用
- \n
- 这里的 n 表示的是一个变量,值为一个数字,指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串
数量词汇
- x{n}
- n 是一个正整数。前面的模式 x 连续出现 n 次时匹配
- x{n,m}
- n 和 m 为正整数。前面的模式 x 连续出现至少 n 次,至多 m 次时匹配
- x{n,}
- n 是一个正整数。前面的模式 x 连续出现至少 n 次时匹配
- x*
- 匹配前面的模式 x 0 或多次
- x+
- 匹配前面的模式 x 1 或多次。等价于 {1,}
- x?
- 匹配前面的模式 x 0 或 1 次
- x|y
- 匹配 x 或 y
匹配模式
-
g
- global,全局模式:找到所有匹配,而不是在第一个匹配后停止
-
i
- ignore,忽略大小写模式:匹配不区分大小写
-
m
- multiple,多行模式:将开始和结束字符(^和$)视为在多行上工作,而不只是匹配整个输入字符串的最开始和最末尾处
-
s
- dotAll / singleline模式:. 可以匹配换行符
-
u
-
unicode,unicode模式:匹配unicode字符集
console.log(/^.$/.test("\uD842\uDFB7")); console.log(/^.$/u.test("\uD842\uDFB7"));
-
-
y
- sticky,粘性模式:匹配正则中lastIndex属性指定位置的字符,并且如果没有匹配也不尝试从任何后续的索引中进行匹配
-
正则工具 http://regexper.com
总结
1)正则的创建
2)正则的匹配方法
3)元字符
4)字符集合
5)边界
6)分组
7)反向引用
8)数量词汇
9)匹配模式
正则表达式;["12312","2312"]
字符串里找到对应的数字;
let str = "fdsafd12312dfaf3443fds2312dafd1111";
方式一;
function getNumber(str){
let arr = [];
let temp = "";
for(let i=0;i<str.length;i++){
// console.log(typeof str[i]);
if(!isNaN(str[i])){
// console.log("数字");
temp += str[i];
}else{
// console.log("非数字");
if(temp!=""){
arr.push(temp);
temp = "";
}
}
}
if