目录
一:正则表达式简介
1 什么是正则表达式
2 正则表达式作用
二:语法格式:
1 定义正则表达式
2 检索、判断是否匹配
(1)test()方法
(2)exec()方法
三:元字符
普通字符:
元字符(特殊字符)
元字符分类
边界符(确定位置)
量词(表示重复次数)
字符类
[ ]匹配字符集合
(1)[ ]里加上连字符“-”
(2)[ ]里面加一个^取反符号
“.”匹配除换行符之外的任何单个字符
预定义
四:修饰符
作用:
语法格式:
replace方法
语法:
五:综合案例
需求以及实现:
效果图:
素材:
本文章目标:学习正则表达式概念及语法,编写简单的正则表达式实现字符查找或检测;
一:正则表达式简介
1 什么是正则表达式
是用于匹配字符串中字符组合的模式。在JS中,正则表达式也是对象
2 正则表达式作用
- 表单验证(匹配):用户名只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文
- 过滤敏感词(替换):过滤掉页面内容中的一些敏感词
- 字符串中提取想要部分(提取)
二:语法格式:
分为两步:先定义正则表达式规则,再根据规则进行查找
1 定义正则表达式
const 变量名 = /表达式/
2 检索、判断是否匹配
(1)test()方法
用来判断确定的正则表达式与指定的字符串是否匹配。如果匹配成功返回true,没有匹配成功返回false
语法:
定义规则的变量名.test(被检测的字符串)
案例:
const str = '前端加油'
const reg = /前端/
console.log(reg.test(str));//true
(2)exec()方法
在一个指定字符串中执行一个搜索匹配。如果匹配成功,该方法返回一个数组,否则返回null
语法:
建立的规则.exec(被检测的字符串)
案例:
const str = '前端加油'
const reg = /前端/
// console.log(reg.test(str));
console.log(reg.exec(str));
三:元字符
普通字符:
大多数字符仅能描述他们本身,称为普通字符。例如所有的字母和数字,以及汉字
也就是说,普通字符只能够匹配字符串中与它们相同的字符
元字符(特殊字符)
是一些具有特殊含义的字符,可以极大提高灵活性和强大的匹配功能
- 比如,规定用户只能输入26个英文字母,普通字符要写abcdefg...
- 元字符写法:[a-z]
元字符分类
边界符(确定位置)
用来提示字符所处的位置,主要有两个字符
^、$两个都出现在正则表达式定义的规则中,则表示精确匹配
量词(表示重复次数)
用来定义某个模式出现的次数
字符类
[ ]匹配字符集合
作用:匹配中括号中任意一个字符
/[abc]/.test('待匹配的字符串'),小括号中字符串只要包含abc中任意一个字符,都返回true
(1)[ ]里加上连字符“-”
使用连字符表示匹配一个范围
[a-zA-Z]表示匹配小写a-z以及大写A-Z中任意一个字符
腾讯QQ号的正则表达式:
/^[1-9][0-9]{4,}/,表示以数字1-9开头,4位以上的数字
(2)[ ]里面加一个^取反符号
/[^a-z]/表示匹配除小写字母以外的字符,注意实在中括号中添加而非再/ /中添加
“.”匹配除换行符之外的任何单个字符
预定义
指的是某些常见模式的简写方式
日期格式:^\d{4}-\d{1,2}-\d{1,2}
四:修饰符
作用:
用于限定正则表达式匹配时的某些细节
语法格式:
/表达式/修饰符
两种修饰符如下:
i是单词ignore的缩写,正则匹配时字母不区分大小写
g是单词global的缩写,匹配字符串中满足正则表达式的所有结果
console.log(/A/i.test('A'))//true
replace方法
语法:
字符串.replace(/正则表达式/,'替换的文本')
五:综合案例
需求以及实现:
要求用户名要用英文字母、数字、下划线或短横线组成,并且用户名长度位6~16位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
span {
display: inline-block;
width: 250px;
height: 30px;
vertical-align: middle;
line-height: 30px;
padding-left: 15px;
}
.error {
color: red;
background: url(./images/error1.png) no-repeat left center;
}
.right {
color: green;
background: url(./images/right.png) no-repeat left center;
}
</style>
</head>
<body>
<input type="text">
<span></span>
<script>
const reg = /^[a-zA-Z0-9-_]{6,16}/
const input = document.querySelector('input')
const span = document.querySelector('span')
input.addEventListener('blur', function () {
if (reg.test(this.value)) {
input.nextElementSibling.innerHTML = '输入正确'
span.classList.remove('error')
span.classList.add('right')
//span.className = 'right'
} else {
input.nextElementSibling.innerHTML = '输入错误'
span.classList.remove('right')
span.classList.add('error')
}
})
</script>
</body>
</html>