正则表达式
-
介绍
-
语法
-
元字符
-
修饰符
.1 什么是正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式
2.正则表达式在 JavaScript中的使用场景: 例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配) 比如用户名: /^[a-z0-9_-]{3,16}$/ 过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
-
定义正则表达式语法:
比如:其中 / / 是正则表达式字面量
2.判断是否有符合规则的字符串:
test() 方法 用来查看正则表达式与指定的字符串是否匹配
语法:
比如:
如果正则表达式与指定的字符串匹配 ,返回true,否则false
检索(查找)符合规则的字符串:
exec() 方法 在一个指定字符串中执行一个搜索匹配
语法:
比如:
如果匹配成功,exec() 方法返回一个数组,否则返回null
正则表达式检测查找 test方法和exec方法区别 test方法 用于判断是否有符合规则的字符串,返回的是布尔值 找到返回true,否则false exec方法用于检索(查找)符合规则的字符串,找到返回数组,否则为 null
<body>
<script>
// 正则表达式的作用 寻找字符串 检测 这个字符串郁闷郁闷我想要的文字
const str = `对努力的自己说加油,提醒虚度的自己不再荒废。相信梦想,梦想才会相信你,
有一种落差是,你配不上自己的野心,也辜负了所受的苦难。`
//判断一下这个字符串有没有梦想两个字
//定义规则
const reg = /梦想/;
//规则和字符串匹配
console.log( reg.test(str)); //有就返回true 没有就返回false
</script>
</body>
元字符
普通字符:
大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。
元字符(特殊字符)
是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。
比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…..
但是换成元字符写法: [a-z]
参考文档:
MDN:developer.mozilla.org/zh-CN/docs/…
正则测试工具: tool.oschina.net/regex
-
边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
如果 ^ 和 $ 在一起,表示必须是精确匹配。
<body>
<script>
const str = `梦想`
//定义规则
const reg = /^梦想$/; //检测的字符串 必须要以梦字开头 想字结尾 且字符串个数一样 (就是原封不动输出)
//规则和字符串匹配
console.log( reg.test(str)); //有就返回true 没有就返回false
</script>
</body>
如果 ^ 开头
<body>
<script>
const str = `梦想123`
//定义规则
const reg = /^梦想/; //检测的字符串 必须要以梦想两个字开头 后边随便你怎么输入
//规则和字符串匹配
console.log( reg.test(str)); //有就返回true 没有就返回false
</script>
</body>
如果 $结尾
<body>
<script>
const str = `121#@¥%……梦想`
//定义规则
const reg = /梦想$/; //检测的字符串 必须要以梦想结尾 前边随便你怎么输入
//规则和字符串匹配
console.log( reg.test(str)); //有就返回true 没有就返回false
</script>
</body>
2. 量词 (表示重复次数)
量词用来 设定某个模式出现的次数
注意: 逗号左右两侧千万不要出现空格
<body>
<script>
// const str = '路飞';
// const reg = /路飞/;
// console.log(reg.test(str)); ///路飞/.test('路飞') 左边放规则 右边被检测的字符串
//*表示 放在它前门那一个字符 可以出现0次或者 多次
console.log(/^路*$/.test('') ); //true
console.log(/^路*$/.test('路') ); //true
console.log(/^路*$/.test('路路') ); //true
console.log(/^路*$/.test('路路路') ); //true
//+ 表示 放在它前面那一个字符,最低出现一次或者多次
console.log(/^路+$/.test('') ); //false
console.log(/^路+$/.test('路') ); //true
console.log(/^路+$/.test('路路') ); //true
console.log(/^路+$/.test('路路路') ); //true
//? 表示 放在它前面那一个字符,出现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('')); //false
console.log( /^路{2,}$/.test('路')); //false
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>
3. 字符类 (比如 \d 表示 0~9)
字符类: (3) 预定义:指的是某些常见模式的简写方式。
<body>
<script>
//.表示除了(换行符之外)任意字符
console.log(/./.test('飞')); //true
console.log(/路.飞/.test('路飞')); //false
console.log(/路.飞/.test('路飞飞')); //true
console.log(/路.飞/.test('路中飞')); //true
//\d 表示数字
console.log(/\d/.test('路飞')); //false
console.log(/\d/.test('1路飞')); //true
console.log(/\d/.test('路2飞')); //true
console.log(/\d/.test('路飞3')); //true
//\D 表示不是数字之外的任意一个字符(只要不是纯数字就行)
console.log(/\D/.test('路飞')); //true
console.log(/\D/.test('112a')); //true
console.log(/\D/.test('aaa')); //true
console.log(/\D/.test('111')); //false
//\w 表示 字母 数字 下划线
console.log(/\w/.test('123')); //true
console.log(/\w/.test('asd')); //true
console.log(/\w/.test('_12%%s')); //true
console.log(/\w/.test('@#$%^& ')); //false
//\W 表示 除去字母 数字 下划线 之外字符就行
console.log(/\W/.test('123')); //false
console.log(/\W/.test('%%%')); //true
//\s 匹配空格 有空格就行
console.log(/\s/.test('123')); //false
console.log(/\s/.test('12 3')); //true
//\S 除了空格之外的符号
console.log(/\S/.test('123')); //true
console.log(/\S/.test(' ')); //flase
console.log(/\S/.test(' ')); //flase
</script>
</body>
(2.)
<body>
<script>
// //[ab] 表示可以匹配a或者b
console.log(/[ab]/.test('a')); //true
console.log(/[ab]/.test('b')); //true
console.log(/[abc]/.test('d')); //false
// //表示a-z任意一个字母
console.log(/[a-z]/.test('gg')); //true
console.log(/[a-z]/.test('dd')); //true
console.log(/[a-z]/.test('123')); //false
console.log(/[a-z]/.test('@@@')); //false
// //0-9任意一个数字
console.log(/[0-9]/.test('8')); //true
console.log(/[0-100]/.test('0')); //true
// //A-Z任意一个数字
console.log(/[A-Z]/.test('a')); //false
console.log(/[A-Z]/.test('A')); //true
//同时满足 0-9 a-z A-Z
console.log(/[0-9 a-z A-Z]/.test('1')); //true
console.log(/[0-9 a-z A-Z]/.test('a')); //true
console.log(/[0-9 a-z A-Z]/.test('@')); //false
console.log(/[0-9 a-z A-Z]/.test('')); //false
</script>
</body>