正则表达式
什么是正则表达式? 正则表达式(Regular Expression)是一种字符串匹配的模式(规则)
使用场景:
- 例如验证表单:手机号表单要求用户只能输入11位的数字 (匹配)
- 过滤掉页面内容中的一些敏感词和高亮搜索关键字(替换)
- 从字符串中获取我们想要的特定部分(提取 )
正则基本使用
正则基本使用分为两步:
举例:
<!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>正则表达式的基本使用</title>
<style>
.box,.box1,.box2 {
width: 500px;
height: 90px;
border: 1px solid rgba(0,0,0,0.3);
}
</style>
</head>
<body>
<h5>原字符串</h5>
<div class="box">
在这个信息爆炸的时代,保持有效的个人联系至关重要。以下是几个关键人物的联系方式,方便大家在需要时能够迅速取得联系。
张经理负责业务拓展,手机号为13800138000;技术支援的小李随时待命解决您的问题,可拨打13700137000。
</div>
<h5>将手机号码变红:</h5>
<div class="box1">
</div>
<h5>提炼手机号码:</h5>
<div class="box2">
</div>
<script>
let str = `在这个信息爆炸的时代,保持有效的个人联系至关重要。以下是几个关键人物的联系方式,方便大家在需要时能够迅速取得联系。
张经理负责业务拓展,手机号为13800138000;技术支援的小李随时待命解决您的问题,可拨打13700137000。`
// const reg2 = /(1[0-9]{10})/g
const reg2 = /(13800138000)/g
document.write(`<br><b>13800138000是否存在:</b>`)
document.write(reg2.test(str))
let repStr = str.replace(reg2,`<span style="color:red;">$1</span>`)
let res = str.match(reg2)
document.querySelector('.box1').innerHTML = repStr
document.querySelector('.box2').innerHTML = res.join('<br>')
</script>
</body>
</html>
- 定义规则
const reg = /表达式/
-
- 其中
/ /
是正则表达式字面量
- 其中
-
- 正则表达式也是
对象
- 正则表达式也是
- 使用正则
-
test()方法
用来查看正则表达式与指定的字符串是否匹配
-
-
- 如果正则表达式与指定的字符串匹配 ,返回
true
,否则false
- 如果正则表达式与指定的字符串匹配 ,返回
-
-
replace()方法
用来替换正则表达式匹配的内容
-
-
- 返回替换以后的完整字符串
- ✨注意:如果要想使用 $1 则需要配合 ()
-
-
match()
用来提取指定内容
-
-
- 返回提取到的内容数组
- ✨注意:如果给正则表达式加了()的时候,需要在正则表达式后面加 g 才能提取正常个数的数据 例如:
/(表达式)/g
-
-
-
- ✨g 是单词 global 的缩写,匹配所有满足正则表达式的结果
- ✨i 是单词 ignore 的缩写,正则匹配时字母不区分大小写
-
元字符
- 普通字符:
- 大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字等
- 普通字符只能够匹配字符串中与它们相同的字符。
- 比如: /13800138000/ 只固定匹配 13800138000 这个手机号码
- 比如,规定用户只能输入英文26个英文字母,使用普通字符表达 /[abcdefghijklmnopqrstuvwxyz]/
- 元字符(特殊字符)
- 是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。
- 比如,匹配手机号码,换成元字符的写法:/1[0-9]{10}/
- 比如,规定用户只能输入英文26个英文字母,换成元字符写法: /[a-z]/
边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
如果 ^ 和 $ 在一起,表示必须是精确匹配
<body>
<script>
// 元字符之边界符
// 1. 匹配开头的位置 ^
const reg = /^web/
console.log(reg.test('web前端')) // true
console.log(reg.test('前端web')) // false
console.log(reg.test('前端web学习')) // false
console.log(reg.test('we')) // false
// 2. 匹配结束的位置 $
const reg1 = /web$/
console.log(reg1.test('web前端')) // false
console.log(reg1.test('前端web')) // true
console.log(reg1.test('前端web学习')) // false
console.log(reg1.test('we')) // false
// 3. 精确匹配 ^ $
const reg2 = /^web$/
console.log(reg2.test('web前端')) // false
console.log(reg2.test('前端web')) // false
console.log(reg2.test('前端web学习')) // false
console.log(reg2.test('we')) // false
console.log(reg2.test('web')) // true
console.log(reg2.test('webweb')) // flase
</script>
</body>
量词
量词用来设定某个模式重复次数
注意: 逗号左右两侧千万不要出现空格
<body>
<script>
// 元字符之量词
// 1. * 重复次数 >= 0 次
const reg1 = /^w*$/
console.log(reg1.test('')) // true
console.log(reg1.test('w')) // true
console.log(reg1.test('ww')) // true
console.log('-----------------------')
// 2. + 重复次数 >= 1 次
const reg2 = /^w+$/
console.log(reg2.test('')) // false
console.log(reg2.test('w')) // true
console.log(reg2.test('ww')) // true
console.log('-----------------------')
// 3. ? 重复次数 0 || 1
const reg3 = /^w?$/
console.log(reg3.test('')) // true
console.log(reg3.test('w')) // true
console.log(reg3.test('ww')) // false
console.log('-----------------------')
// 4. {n} 重复 n 次
const reg4 = /^w{3}$/
console.log(reg4.test('')) // false
console.log(reg4.test('w')) // flase
console.log(reg4.test('ww')) // false
console.log(reg4.test('www')) // true
console.log(reg4.test('wwww')) // false
console.log('-----------------------')
// 5. {n,} 重复次数 >= n
const reg5 = /^w{2,}$/
console.log(reg5.test('')) // false
console.log(reg5.test('w')) // false
console.log(reg5.test('ww')) // true
console.log(reg5.test('www')) // true
console.log('-----------------------')
// 6. {n,m} n =< 重复次数 <= m
const reg6 = /^w{2,4}$/
console.log(reg6.test('w')) // false
console.log(reg6.test('ww')) // true
console.log(reg6.test('www')) // true
console.log(reg6.test('wwww')) // true
console.log(reg6.test('wwwww')) // false
// 7. 注意事项: 逗号两侧千万不要加空格否则会匹配失败
</script>
范围
表示字符的范围,定义的规则限定在某个范围,比如只能是英文字母,或者数字等等,用表示范围
<body>
<script>
// 元字符之范围 []
// 1. [abc] 匹配包含的单个字符, 多选1
const reg1 = /^[abc]$/
console.log(reg1.test('a')) // true
console.log(reg1.test('b')) // true
console.log(reg1.test('c')) // true
console.log(reg1.test('d')) // false
console.log(reg1.test('ab')) // false
// 2. [a-z] 连字符 单个
const reg2 = /^[a-z]$/
console.log(reg2.test('a')) // true
console.log(reg2.test('p')) // true
console.log(reg2.test('0')) // false
console.log(reg2.test('A')) // false
// 想要包含小写字母,大写字母 ,数字
const reg3 = /^[a-zA-Z0-9]$/
console.log(reg3.test('B')) // true
console.log(reg3.test('b')) // true
console.log(reg3.test(9)) // true
console.log(reg3.test(',')) // flase
// 用户名可以输入英文字母,数字,可以加下划线,要求 6~16位
const reg4 = /^[a-zA-Z0-9_]{6,16}$/
console.log(reg4.test('abcd1')) // false
console.log(reg4.test('abcd12')) // true
console.log(reg4.test('ABcd12')) // true
console.log(reg4.test('ABcd12_')) // true
// 3. [^a-z] 取反符
const reg5 = /^[^a-z]$/
console.log(reg5.test('a')) // false
console.log(reg5.test('A')) // true
console.log(reg5.test(8)) // true
</script>
</body>
案例1-练习test,match,replace
使用正则表达式实现如下需求:
- 使用正则表达式将【原字符串】中的所有电话号码替换成【红色】 - replace
- 使用正则表达式,提取出所有的电话号码 - match
- 判断是否存在136开头的电话号码 - test
/(1[0-9]{10})/g
/(136[0-9]{8})/g
<!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>正则表达式的基本使用</title>
<style>
.box,.box1,.box2 {
width: 500px;
height: 90px;
border: 1px solid rgba(0,0,0,0.3);
}
</style>
</head>
<body>
<h5>原字符串</h5>
<div class="box">
在这个信息爆炸的时代,保持有效的个人联系至关重要。以下是几个关键人物的联系方式,方便大家在需要时能够迅速取得联系。
张经理负责业务拓展,手机号为13800138000;技术支援的小李随时待命解决您的问题,可拨打13700137000。
</div>
<h5>将手机号码变红:</h5>
<div class="box1">
</div>
<h5>提炼手机号码:</h5>
<div class="box2">
</div>
<script>
let str = `在这个信息爆炸的时代,保持有效的个人联系至关重要。以下是几个关键人物的联系方式,方便大家在需要时能够迅速取得联系。
张经理负责业务拓展,手机号为13800138000;技术支援的小李随时待命解决您的问题,可拨打13700137000。`
const reg2 = /(1[0-9]{10})/g
// const reg2 = /(13800138000)/
// const reg2 = /(1\d{10})/g
document.write(`<br><b>否存在136开头的电话号码:</b>`)
const reg3 = /(136[0-9]{8})/g
document.write(reg3.test(str))
let repStr = str.replace(reg2,`<span style="color:red;">$1</span>`)
let res = str.match(reg2)
console.log(res);
document.querySelector('.box1').innerHTML = repStr
document.querySelector('.box2').innerHTML = res.join('<br>')
</script>
</body>
</html>
案例2:用户名验证
Web,console,log,APIs,reg2,笔记,test,const,true From: https://blog.csdn.net/weixin_67448099/article/details/144601589