正则表达式:
一.基本语法:
- 正则语法对字符串的合法性进行效验,在正则看来所有内容都是字符串
- 学习正则表达式就是学习它的元字符
- 使用//定义正则表达式:let ref=/正则表达式/
- 校验方法:正则表达式.test(字符串),返回true/false
1.定义正则表达式语法:
<script>
let 变量名 = /表达式/
// 其中 / / 是正则表达式字面量
//比如:
let reg = /前端/
2.判断是否有符合规则的字符串:
- test() 方法 用来查看正则表达式与指定的字符串是否匹配
<script>
// 语法:
regObg.test(被检测的文字)
// 比如:
let str = "IT培训,前端开发培训,web前端培训,软件测试培训,产品经理培训"
let reg = /前端/
let re = reg.test(str)
console.log(re) //true
</script>
如果正则表达式与指定的字符串匹配 ,返回true,否则false
- exec() 方法 在一个指定字符串中执行一个搜索匹配 检索(查找)符合规则的字符串:
<script>
// 语法:
regObg.exec(被检测的字符串)
// 比如:
let str = "IT培训,前端开发培训,web前端培训,软件测试培训,产品经理培训"
let reg = /前端/
let re = reg.exec(str)
console.log(re) //返回的是一个数组
</script>
如果匹配成功,exec() 方法返回一个数组,否则返回null
3.字符串转数组:
<script>
// 我们在实际开发过程中,有很多需求要针对字符串做处理
// js 帮我们封装了很多大量和实用 字符串方法
// 先介绍一些
// 转大写 转小写。
// let msg = 'HELLODFDFDFDFDFD';
// 广告 msg 大写
// msg="HELLO";// 搞定 楼下大妈也会!!! low 低级 不堪入目
// console.log(msg.toUpperCase());
// 转小写
// console.log(msg.toLowerCase()); //转成小写
// 字符串和数组很相似
// 能不能把字符串 转成数组?
const str = "abcdefg"; //=> ["a","b","c","d","e","f","g"]
// // split("") 分割
// console.log(str.split(""));
// const str = 'a-b-c-d-e-f-g'; // ["a","b","c","d","e","f","g"]
// console.log(str.split('-'));
// console.dir(str);
/*
1 转大写 toUpperCase()
2 转小写 toLowerCase()
3 转数组 str.split('') 按照什么来分割你的字符串变成数组
*/
</script>
4.数组转字符串:
<script>
// 数组 补充 常用
//
// const arr = ['a', 'b', 'c', 'd'];
// console.log(arr.join('')); // join 数组转字符串
// console.log(arr.join('-')); // a-b-c-d 数组转字符串
// 连接 数组和数组之间连接
// const arr1 = ['1', '2', '3'];
// const arr2 = ['a', 'b', 'c'];
// 将两个数组合并成一个数组
// console.log(arr1.concat(arr2));
//字符串也有一个 concat 也是表示合并
const str1 = '123';
const str2 = 'abc';
// console.log(str1.concat(str2));// 很少用 有什么用? 当你的键盘 + 键坏 使用它
console.log(str1 + str2); // 更加简单好理解
</script>
二.正则创建的建议:
- 先占位后修饰
- 修饰不能单独存在
- 从左到右写
三.边界符:
边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)
-
作用:限定匹配的字符长度
-
表现形式:/^表达式$/
<script> const str = `金来123`; // const reg = /梦想/; // 只要字符串中 包含有 梦想 返回true // 你检测的字符串 必须要以 “梦” 开头 以 “想” 结尾 // const reg = /^金来$/; // 只能匹配 "金来" const reg = /^金来/; // `金来123`; // const reg = /金来$/; // `1234323金来`; // console.log(reg.test(str)); /* 边界符 开头 ^ 结尾 $ */ </script>
四.元字符:
量词:
注意: 逗号左右两侧千万不要出现空格
量词用来 设定某个模式出现的次数
-
*:修饰前面的字符出现任意多次
-
+:修饰前面的字符出现一次或多次
-
?:修饰前面的字符出现0次或1次
-
{n}:修饰前面的字符出现n次
-
{n,m}:修饰前面的字符最少出现n次,最多m次
-
{n}:修饰前面的字符最少出现n次,最多没有限制
例:
<script> // const str="路飞"; // const reg=/路飞/; // console.log(reg.test(str)); // * 表示 放在它前面那一个字符 可以出现0次或者多次 // /^路*$/ => "", 路,路路,路路路 // console.log(/^路*$/.test('')); // true // console.log(/^路*$/.test('路')); // true // console.log(/^路*$/.test('路路')); // true // console.log(/^路*$/.test('路路路')); // true // + 表示 放在它前面那一个字符 可以出现1次或者多次 // console.log(/^路+$/.test('')); // console.log(/^路+$/.test('路')); // console.log(/^路+$/.test('路路')); // console.log(/^路+$/.test('路路路')); // ? 表示出现0次或者1次 // console.log(/^路?$/.test(''));// true // console.log(/^路?$/.test('路')); // true // console.log(/^路?$/.test('路路')); // false // console.log(/^路?$/.test('路路路')); // false // {n} 放在它前面的那一个字符 出现n次 // console.log(/^路{2}$/.test('')); // false // console.log(/^路{2}$/.test('路')); // false // console.log(/^路{2}$/.test('路路')); // true // console.log(/^路{2}$/.test('路路路')); // false // {n,} 放在它前面的字符 最少出现n次 // console.log(/^路{2,}$/.test('')); // falsh // console.log(/^路{2,}$/.test('路')); // falsh // console.log(/^路{2,}$/.test('路路'));// true // console.log(/^路{2,}$/.test('路路路')); // true // {n,m} 放在它前面的字符 最少出现n次,最大是m次 console.log(/^路{0,2}$/.test('')); // true console.log(/^路{0,2}$/.test('路')); // true console.log(/^路{0,2}$/.test('路路')); // true console.log(/^路{0,2}$/.test('路路路')); // false </script> </body>
占位符:
字符类型:数字、大写字母、小写字母、空字符、下划线、其他字符
字符类1: [ ] 里面加上 - 连字符 例:
-
[a-z] 表示 a 到 z 26个英文字母都可以
-
[a-zA-Z] 表示大小写都可以
-
[0-9] 表示 0~9 的数字都可以
**字符类2: ** [ ] 里面加上 ^ 取反符号
- 【^a-z】匹配除了小写字母以外的字符
- 注意要写到中括号里面
字符类3:
- . (点)匹配除换行符之外的任何单个字符
<script>
// [ab] => 可以匹配 a 或者 b
console.log(/[ab]/.test('a'));// true
console.log(/[ab]/.test('b'));// true
console.log(/[abc]/.test('c'));// true
// 表示 a-z 任意的一个字母
console.log(/[a-z]/.test('c'));// true
console.log(/[a-z]/.test('d'));// true
console.log(/[a-z]/.test('123'));// false
console.log(/[a-d]/.test('a'));// true
console.log(/[a-d]/.test('g'));// false
// 0-9 任意的一个数字
console.log(/[0-9]/.test("1"));// true
console.log(/[0-9]/.test("2"));// true
console.log(/[0-9]/.test("0"));// true
// A-Z
console.log(/[A-Z]/.test("a"));// false
console.log(/[A-Z]/.test("B"));// true
// 同时满足 0-9a-zA-Z
console.log(/[0-9a-zA-Z]/.test('1'));// true
console.log(/[0-9a-zA-Z]/.test('a'));// true
console.log(/[0-9a-zA-Z]/.test('A'));// true
console.log(/[0-9a-zA-Z]/.test(' '));// false
</script>
</body>
- \d:匹配0-9之间的任意数字,相当于[0-9]
- \D:匹配所有0-9以外的字符,除了0至9外都行,相当于【^0-9】
- \w:匹配任意的字母、数字和下划线,相当于[A-Za-z0-9]
- \W:除所有的字母、数字和下划线以外的字符,相当于【^A-Za-z0-9】
- \s:匹配空格(包括换行符、制表符、空格符等),相当于【t\r\n\v\f】
- \S:匹配非空格的字符,相当于【^t\r\n\v\f】
<script>
// . 表示除了(换行符之外)任意字符
console.log(/路/.test('飞')); // false
console.log(/./.test('飞')); // true
console.log(/路.飞/.test('路大飞')); // true
console.log(/路.飞/.test('路小飞')); // true
console.log(/路.飞/.test('路中飞')); // true
console.log(/路.飞/.test('路不飞')); // true
console.log(/路.飞/.test('路飞')); // false
console.log(/路.飞/.test('路 飞')); // false
// \d 表示数字
console.log(/\d/.test("路飞"));// false
console.log(/\d/.test("1路飞"));// true
console.log(/\d/.test("路3飞"));// true
// \D 不是数字之外的任意1个字符
console.log(/\D/.test("123"));// false
console.log(/\D/.test("12a3"));// true
console.log(/\D/.test("12a3"));// true
// \w 字母、数字、下划线
console.log(/\w/.test("123"));// true
console.log(/\w/.test("%%"));// false
console.log(/\w/.test("%1%"));// true
console.log(/\w/.test("%a%"));// true
console.log(/\w/.test("%_%"));// true
// \W 除去了 字母 、数字、下划线 之外字符
console.log(/\W/.test("123"));// false
console.log(/\W/.test("1%23"));// true
// \s 匹配空格
console.log(/\s/.test("123"));// false
console.log(/\s/.test("1 23"));// true
// \S 除了空格之外的字符
console.log(/\S/.test('123'));// true
console.log(/\S/.test(' '));// false
console.log(/\S/.test(' '));// false
</script>
转义:\
将元字符当成普通字符来处理
修饰符:
修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
<script>
//语法:
/表达式/修饰符
console.log(/a/i.test('a')); //true
console.log(/a/i.test('A')); //true
</script>
- i 是单词 ignore 的缩写,正则匹配时字母不区分大小写
- g 是单词 global 的缩写,匹配所有满足正则表达式的结果
replace 替换:
<script>
let str = '天天 今天请吃饭';
// 吃饭 -> 上天台
// "字符串".replace("待替换文字","替换什么样") 返回一个新的字符串
let newStr = str.replace('吃饭', '上天台');
console.log(newStr);
</script>
正则替换:
<script>
let str = '天天 HEIGHT 180 ';
// 将数字 替换成 *
// str.replace("支持正则的方式来匹配文字","要替换成什么样");
// str = str.replace(/\d+/, '*');// 找到一个或者多个数字,然后只替换成一个 *
// str = str.replace(/\d/g, '*');// g 属于正则中的 修饰符 表示 全局 global
// console.log(str);
// 把英文字母替换成 *
// str=str.replace(/[a-zA-Z]/g,"*")
str = str.replace(/[a-z]/gi, "*") // i ignore忽略 忽略大小写
console.log(str);
</script>