正则表达式
介绍
概念:正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象
作用:
- 表单验证(匹配)
- 过滤敏感词(替换)
- 字符串中提取我们想要的部分(提取)
使用
定义/创建正则表达式
-
字面量创建
语法:
const 变量名 = /表达式/
//是否包含'123'字符 const reg = /123/ -
构造函数创建
语法:
const 变量名 = new RegExp(/表达式/)
const reg = new RegExp(/123/)
检测查找是否匹配
test() 方法
语法:正则变量名.test(被检测字符串)
作用:查看正则表达式与指定的字符串是否匹配
返回值:布尔值,如果正则表达式与指定的字符串匹配 ,返回true,否则false
console.log(reg.test('123asda123s'))
exec() 方法
语法:正则变量名.exec(被检测字符串)
作用:在一个指定字符串中执行一个搜索匹配
返回值:如果匹配成功,exec() 方法返回一个数组,否则返回null
console.log(reg.exec('123asda123s'))
正则表达式检测查找 test方法和exec方法区别:
- test方法 用于判断是否有符合规则的字符串,返回的是布尔值 找到返回true,否则false
- exec方法用于检索(查找)符合规则的字符串,找到返回数组,否则为 null
元字符
概念:
元字符:是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能
分类
边界字符(表示位置,开头和结尾,必须用什么开头,用什么结尾)
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
-
^:表示匹配行首的文本(以xxx为开头)
-
$:表示匹配行尾的文本(*以xxx为结尾)
如果 ^ 和 $ 在一起,表示必须是精确匹配。
// ^:以xxx为开头 // const reg = /^abc///以abc为开头(以a为开头,后面跟bc) // const re = reg.test('abc12312ds') // console.log(re) // $:以XXX为结尾 // const reg = /abc$///以abc为结尾(以c为结尾,前面是ab) // console.log(reg.test('abc12312abc')) // console.log(reg.test('abc12312ABC')) // console.log(reg.test('abc12312abca')) // ^,$精确匹配 // 以a为开头,以c为结尾,中间只能是b const reg = /^abc$/ console.log(reg.test('abcabc'))//false console.log(reg.test('abc12312abc'))//false console.log(reg.test('abc'))//true
量词 (表示重复次数)
作用:量词用来 设定某个模式出现的次数
-
*表示重复 0 次或多次
// a开头,a结尾,中间为a,a的个数可以为0 const reg = /^a*$/ console.log(reg.test(''))//t console.log(reg.test('a'))//t console.log(reg.test('aa'))//t console.log(reg.test('aaa'))//t console.log(reg.test('A'))//f console.log(reg.test('ab'))//f -
+ 表示重复至少 1 次
const reg = /^a+$/ console.log(reg.test(''))//f console.log(reg.test('a'))//t console.log(reg.test('aa'))//t console.log(reg.test('aaa'))//t console.log(reg.test('n'))//f console.log(reg.test('A'))//f console.log(reg.test('ab'))//f -
? 表示重复 0 次或1次
const reg = /^a?$/ console.log(reg.test(''))//t console.log(reg.test('a'))//t console.log(reg.test('aa'))//f console.log(reg.test('n'))//f console.log(reg.test('A'))//f console.log(reg.test('ab'))//f -
{m} 表示复 m 次
-
{m, } 表示复 m 次或大于m次
-
{m, n} 表示复 m 到 n 次
//const reg = /^a{3}$/ // const reg = /^a{3,}$/ const reg = /^a{3,5}$/ console.log(reg.test(''))//f console.log(reg.test('a'))//f console.log(reg.test('aa'))//f console.log(reg.test('aaa'))//t console.log(reg.test('aaaaa')) console.log(reg.test('aaaaaaaa')) console.log(reg.test('n'))//f console.log(reg.test('Aaaaaa'))//f console.log(reg.test('aaaab'))//f
字符类(比如 \d 表示 0~9)
[ ] 匹配字符集合
后面的字符串只要包含 abc 中任意一个字符,都返回 true 。
//[abc]:匹配其中的一个,a,b,c const reg = /^[abc]$/ console.log(reg.test('a')) console.log(reg.test('b')) console.log(reg.test('c'))
[ ] 里面加上 - 连字符
使用连字符 - 表示一个范围
-
[a-z] 表示 a 到 z 26个英文字母都可以
-
[a-zA-Z] 表示大小写都可以
-
[0-9] 表示 0~9 的数字都可以
// 匹配a到z其中之一 // const reg = /^[a-z]$/ // 匹配a到z,A到Z其中之一 // const reg = /^[a-zA-Z]$/ // 匹配a到z,A到Z,0到9其中之一 // const reg = /^[a-zA-Z0-9]$/ // 中杠放在最后,表示字符,放在字符串中间代表:中杠的前一个字符到中杠的后一个字符 const reg = /^[a-zA-Z0-9_-]$/ console.log(reg.test('i')) console.log(reg.test('I')) console.log(reg.test('ab')) console.log(reg.test('6')) console.log(reg.test('_')) console.log(reg.test('-'))
其他元字符
取反:^
[ ] 里面加上 ^ 取反符号,表示除了匹配中括号内字符的其他单个字符
注意要写到中括号里面
// 不匹配[a-zA-Z0-9]的其他单字符 const reg = /^[^a-zA-Z0-9]$/ //f console.log(reg.test('6'))//f console.log(reg.test('*'))//t console.log(reg.test('!'))//t console.log(reg.test('ab'))//f
除了\n以外的任一个单字符:.
const reg = /^.$/ console.log(reg.test('m'))//t console.log(reg.test('M'))//t console.log(reg.test('6'))//t console.log(reg.test('*'))//t console.log(reg.test('@'))//t console.log(reg.test('#'))//t console.log(reg.test('ab'))//f console.log(reg.test('\n'))//f
任一个字符:(字符1|字符2|字符3)
const reg = /^(张三丰|刘德华|张无忌)$/ console.log(reg.test('张三丰'))//t console.log(reg.test('刘德华'))//t console.log(reg.test('张无忌'))//t console.log(reg.test('小明'))//f
匹配任意单字符
const reg = /^(.|\n)$/ console.log(reg.test('m'))//t console.log(reg.test('M'))//t console.log(reg.test('6'))//t console.log(reg.test('*'))//t console.log(reg.test('@'))//t console.log(reg.test('#'))//t console.log(reg.test('\n'))//t
注意
中括号:具有转义含义,特殊字符在[]里只是普通字符
const reg = /^(张三丰|刘德华|张无忌)$/:含义匹配:张三丰 或 刘德华 或 张无忌
const reg = /[1]$/:含义匹配:张,三,丰,|,刘,德,华,|,张,无,忌 任意一个字符
预定义
预定义:指的是 某些常见模式的简写方式。
预定类 | 说明 |
---|---|
\d | 匹配0-9之间的任一数字,相当于[0-9] |
\D | 匹配所有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] |
修饰符
修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
语法:/表达式/修饰符
- i是单词 ignore 的缩写,正则匹配时字母不区分大小写
- g 是单词 global 的缩写,匹配所有满足正则表达式的结果
let str = 'asdsaAFSSHdsfs' // replace:替换字符串,仅第一个替换 // str.replace('旧','新') // str = str.replace('s','*') str = str.replace(/s/gi,'*') console.log(str)
张三丰|刘德华|张无忌 ↩︎
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性