正则表达式
正则与字符串方法结合 split/match/search/replace 切割 / 匹配结果 /查找位置/替换过滤字符
正则表达式方法 exec/test 执行\判断
字符集 [0-9]
修饰符 全局or不敏感匹配//g(i)
边界符 ^ $ 开头/结尾
预定义类 \s\d\w 空格\数字\字符
量词 +/{n}
分组 /(整体)/
中文匹配 [\u4e00-\u9fa5]
正则表达式是用于匹配字符 串的一种模式、方法。
正则表达式:regular expression,简称RegExp。
正则表达式定义最常用的方法是字面量,写法//。
括号内字符不用加引号
- 正则表达式书写是由//组成,这两个反斜杠称之为定界符
- 正则属于引用数据类型
console.log(/abc/);
正则在控制台打印值时,正则红色,字符串黑色,数字蓝色。
1.1字符串方法结合正则
字符串方法:
# *split:根据匹配字符串切割父字符串
# match:使用正则表达式与字符串相比较,返回一个包含匹配结果的数组
# search:使用正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的*下角标*
# replace:使用正则表达式和字符串比较,然后用新的子串来替换被匹配的子串
var str="我喜欢中国 上海 哈尔滨 北京";
var arr=str.split(/\s+/);
# \s(space)表示一个空格
# +在正则当中表示的是量词,代表含义连续出现次数大于等于1
2.1字符串split
split:根据匹配字符串切割父字符串
转化为数组
eg: 根据空格切割字符串:'aa bbb c dd eeeeee'
var arr = str.split(/\s+/);
练习:根据字母a切割字符串 ‘bbaacaaaadddaeeeeeaaf'
var arr = str.split(/a+/)
2.2字符串match
match:使用正则表达式与字符串相比较,返回一个包含匹配结果的数组
(/liu/g) g===>global 全局
eg:在 'abbcccbbbbbddbbbdabbb' 中查询重复 'b' 字符串。
var str = "abbcccbbbbbddbbbdabbb";
var arr = str.match(/b+/);
练习:'aaaa o o bbb o o aaa'找寻所有‘o o’字符串
var str2 = "aaaa o o bbb o o aaa";
var arr2 = str2.match(/o\s+o/g);
2.3字符串search
search:使用正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下角标
eg:在‘abcdefg’中寻找‘cd’位置
var str = "abcdefg";
console.log(str.search(/cd/));
练习:在字符串'aaaa o o bbb aaa'中寻找重复的a的位置。
var str = "aaaa o o bbb aaa";
console.log(str.search(/a+/g));
2.4字符串replace
replace:使用正则表达式和字符串比较,然后用新的子串来替换被匹配的子串
不用正则只能匹配第一个
eg:将'www.hello.com'替换成'www.byebye.com'
var str = "www.hello.com";
var str2 = str.replace(/hello/,"byebye");
练习:过滤字符串中空格:'aa b c d e f ' => "aabcdef"
var str = "aa b c d e f ";
var str2 = str.replace(/\s+/g,"");
正则表达式方法
3.1正则方法exec
exec:在目标字符串中执行一次正则匹配操作
# 格式: reg=/0/;//定义正则格式
console.log(reg.exec(字符串));//规则.exec(数据)
eg:在'aaaabccccbacabc'中查找'abc'字符串
var reg = /abc/;
console.log(reg.exec("aaaabccccbacabc"));
练习:在'ooooo 0 0 ooooooooooo'字符串中匹配["o 0 0 o"]
var reg1 = /o\s+0\s+0\s+o/;
console.log(reg1.exec("ooooo 0 0 ooooooooooo"));
3.2正则方法test
test:测试当前正则是否能匹配目标字符串
会返回布尔值。
eg:判断'aaddccddabcddeeddfff'是否包含'abc'字符串
var reg = /abc/;
console.log(reg.test("aaddccddabcddeeddfff"));
练习:检测'a bc'和'abc'是否包含空格。
4.1字符集 (正则匹配范围集)
// 简单类:就是任意多个字符进行集合书写,多个字符连续书写。
// 只能匹配某一个符合条件的字符
比如:[abc]
// 范围类:有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线。
比如:[0-9] [A-Z] [a-z]
// 组合类:允许用中括号匹配不同类型的单个字符,或者是一类及多类,或者一些单一的符号。
多个范围中间没有连接号
比如:[0-9a-z]
简单类
var str ="我喜欢abc,但是我也喜欢bbc"
var arr =str.match(/[ab]bc/g);//就能查找两个字符
4.2修饰符
// g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
// i 修饰符用于执行对大小写不敏感的匹配。
4.3边界符
// ^ 开头 表示字符串必须以^后面的内容作为开头。
// $ 结尾 表示$前面匹配的结果必须位于字符串最后
^查开头
// 正则表达式中:边界表达式一共两者
// ^:代表的是字符串是以^后面内容为开头的
var str="web是最好的语言";
console.log(/^web/,test(str));
检测是否web开头
$查结尾
// $:代表的是字符串是以$前面内容结尾
var str="我非常喜欢react框架中jsx"
console.log(/jsx$/.test(str));
- ^一定出现第一个定界符的后面
- $一定出现第二个定界符的前面
- 边界符可以两个同时出现
5.1预定义类
d 数字 digit
// \d [0-9] \d可以匹配一个任意的数字字符
// \D [^0-9] \D 匹配任意一个不是数字的字符
s 空格 space
// \s 可以匹配任意的空白。
// \S 可以匹配任意的不是空白的字符。
w 单词 word
// \w 可以匹配任意的字母、数字或下划线。
// \W 可以匹配任意的字母、数字、下划线以外的内容。
-
预定义类:这个术语、及特定符号只能在正则表达式中使用
-
\d 代表的是[0-9]之间的任意一个一位数字
var str ="我今天买一个华为P30.花了我5888元";
替换其中的数字
1.字符集 console.log(str.replace(/[0-9]+/g,'*'));
2.预定义类 console.log(str.replace(/\d+/g,'*'));
5.2量词
如果需要将正则的某个符号连续匹配多次,可以使用量词对符号进行修饰。量词的写法:{},内部书写对
应的数字,表示量词是多少。
// {n} 硬性量词 对应零次或者n次
// {n,m} 软性量词 至少出现n次但不超过m次(中间不能有空格)
// {n,} 软性量词 至少出现n次
// ? 软性量词 出现零次或一次
// * 软性量词 出现零次或多次(任意次)
// + 软性量词 出现一次或多次(至少一次)
so: +想当于(1,)
var str="我今年高考,考了688分距离清华大学还差10分",1324;
var arr=str.match(/\d+/g); 688 10 1234
var arr=str.match(/\d{3}/g); 688 123
6、分组
正则中使用()表示分组,内部的内容会作为一个整体进行操作。
后期如果小括号后面有量词,表示小括号内部整体重复匹配多少次。
/(byebye){2}/.test(“byebye”) true
分组:在正则表达式中,利用小括号括起来的内容当中当作一个整体进行。
var str="byebye";
console.log(/(bye){2}/.test(str));
7、中文匹配
固定字符集写法:[\u4e00-\u9fa5]
可以匹配一个任意的中文汉字。
var str="老师1每天都在2摸鱼3";
console.log(str.replace(/[\u4e00-\u9fa5]+/g,"k"));
// 此时连续出现的汉字的换成了k