正则表达式
一、什么是正则表达式?
本质:用于匹配字符串中字符串组合的模式,在JS中,正则表达式也是对象
作用:通常用来查找,替换那些复合正则表达式的文本
使用场景
1.验证表单:只能输入英文,数字或者下划线等
2.过滤页面敏感词汇,或者从字符串获取想要的特定部分
二、语法
1.定义规则(//是字面量)
2.查找,判断是否有符合的字符串
test()方法,用来查看正则表达式与指定字符串是否匹配
exec()方法 在一个指定字符串中执行一个搜索匹配
<script>
/* 正则的作用 寻找字符串 检测这个字符串有没有我想要的文字 */
const str = `金钱对你以为着什么?你有梦想吗?`
/* 定义规则: 梦想两个字 */
const reg = /梦想/
/* 判断 str中,有没有reg的规则 */
console.log(reg.test(str));
</script>
三、元字符
本质:是具有特殊含义的字符,提高灵活性和强大的匹配功能
作用:规定用户只能输入英文26个字母,用普通字符得写a~z
1.普通字符(不是元字符 作对比)
大多数的字符仅能描述它们本身,称为普通字符
例如:所有字母,数字
普通字符只能匹配字符串中与他们相同的字符
2.边界符(表示位置,开头和结尾)
<body>
<script>
let str = `你有梦想吗?你想坐拥亿万资产吗`
let reg = /^资产$/ //以“资”开头,“产”结尾
console.log(reg.test(str)); // 为false 必须是str =`资产`时,为true
let reg1 = /^你有梦想吗?你想坐拥亿万资产吗$/
console.log(reg1.test(str)); // 为true
let str1 = `进来123`
let reg2 =/^进来/ // 表示必须以 “进来”开头 即可
console.log(reg2.test(str1)); //为true
let reg3 =/123$/ // 表示必须以 “123”结尾 即可
console.log(reg3.test(str1)); //为true
/* 总结:边界符 开头^ 结尾$ 根据需求指定相应规则 */
</script>
总结:
1.边界符 开头^ 结尾$ 根据需求指定相应规则
2.^&一起必须精确匹配
3.量词(修饰符,表示重复次数)
<script>
/* let str = `路路`
let reg = /^路路&/ */
console.log(/^路路$/.test(`路路`));
========================================================
// *表示 放在前面的字符串 只能出现0次或者多次
/* console.log(/^路*$/.test(``));
console.log(/^路*$/.test(`路`));
console.log(/^路*$/.test(`路路`));
console.log(/^路*$/.test(`路路路`)); *///全都是true
//+表示 放在前面的字符串 只能出现1次或者多次
/* console.log(/^路+$/.test(``)); // false 一下都是true
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(`路路路`)); */
//{n}表示 放在前面的字符串 只能出现n次 自定义
/* console.log(/^路?{2}/.test(``));
console.log(/^路?{2}/.test(`路`));
console.log(/^路?{2}/.test(`路路`)); // 只有这个是true
console.log(/^路?{2}/.test(`路路路`)); */
//{n,}表示 放在前面的字符串 最少出现n次 自定义
/* console.log(/^路{2,}$/.test(``)); //fa
console.log(/^路{2,}$/.test(`路`)); //fa
console.log(/^路{2,}$/.test(`路路`)); //tr
console.log(/^路{2,}$/.test(`路路路`)); *///tr
// {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>
字符类(字符合集)
<script>
//. 表示除了(换行符之外)任意数字 1个
console.log(/路.飞/.test(`路大飞`));//true
console.log(/路.飞/.test(`路飞`));//false
// \d 表示数字 1个
console.log(/路\d飞/.test(`路1飞`));//true
console.log(/路\d飞/.test(`路a飞`));//false
// \D 不是数字 之外任意1个
console.log(/路\D飞/.test(`路大飞`));//true
console.log(/路\D飞/.test(`路1飞`));//false
// \w 字母 数字 下划线 1个
console.log(/路\w飞/.test(`路大飞`));//faler
console.log(/路\w飞/.test(`路1飞`));//true
// \W 除了 字母 数字 下划线 之外1个
console.log(/路\W飞/.test(`路大飞`));//true
console.log(/路\W飞/.test(`路1飞`));//false
// \s 空格 1个
console.log(/路\s飞/.test(`路 飞`));//true
console.log(/路\s飞/.test(`路1飞`));//false
// \S 除了空格之外 1个
console.log(/路\S飞/.test(`路大飞`));//true
console.log(/路\S飞/.test(`路 飞`));//false
/* 注意:一个只能对应一个 */
</script>
<SCript>
//[ab] = 匹配a 或者 b
console.log(/[ab]/.test(`a`));
// a-z 匹配a到z
console.log(/[a-z]/.test(`a`));
// A-Z 大写 一样
console.log(/[A-Z]/.test(`a`)); // false
// 0-9
console.log(/[0-9]/.test(`2`));
// 这样错 只能0 1 2 , 10 12 12 , 100 直接0-100为false
console.log(/[0-100]/.test(`2`));
//同时满足 连写
console.log(/[0-9a-zA-Z]/.test(`a123`));
</SCript>