本文已参与「新人创造礼」活动, 一同开启创造之路。
正则表达式概述
- 什么是正则表达式?
- 正则表达式(Regular Expression)是用于匹配字符串中字符组合的形式。在JavaScript中,正则表达式也是目标。
- 正则表达式通常被用来检索、替换那些契合某个形式(规矩)的文本,例如表单验证:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中能够输入中文(
匹配
)。此外,正则表达式还常用于过滤掉页面内容中的一些灵敏词(替换
),或从字符串中获取咱们想要的特定部分(提取
)等。 - 其他言语也会运用正则表达式,但是这主要是利用 JavaScript 正则表达式完成表单验证。
正则表达式的特色
- 灵活性、逻辑性和功能性十分强。
- 能够迅速的用极简单的办法达到字符串的复杂控制。
- 关于刚触摸的人来说,比较晦涩难懂。比方:
^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
这是验证邮箱的表达式。 - 实践开发,一般都是直接仿制写好的正则表达式。但是要求会运用正则表达式而且依据实践情况修改正则表达式。比方用户名:
/^[a-z0-9_-]{3,16}$/
3-16位用户名。
正则表达式在 JavaScript 中的运用
创立正则表达式
在 JavaScript 中,能够经过两种办法创立一个正则表达式。
1. 经过调用 RegExp 目标的结构函数创立。
// 语法:var 变量名 = new RegExp(/表达式/)
var regexp = new RegExp(/123/)
2. 经过字面量创立。
// 语法:var 变量名 = /表达式/
var rg = /123/
测验正则表达式 test
test()正则目标办法,用于检测字符串是否契合该规矩,该目标会回来 true 或 false ,其参数是测验字符串。
语法:regexobj.test(str)
- 主要效果:
- regexobj 是写的正则表达式。
- str 是咱们要测验的文本。
- 便是检测 str 文本是否契合咱们写的正则表达式标准。
正则表达式中的特别字符
正则表达式的组成
- 一个正则表达式
能够由简略的字符构成
,比方 /abc/ ,也能够是简略和特别字符的组合
,比方 /ab*c/ 。其间特别字符也被称为元字符,在正则表达式中是具有特别
含义的专用符号
,如 ^ 、$ 、+ 等。 - 特别字符十分多,能够参阅:
- MDN
- 正则测验东西
鸿沟符
- 正则表达式中的鸿沟符(方位符)用来提示字符所在的方位,主要有两个字符。
鸿沟符 | 阐明 |
---|---|
表明匹配行首的文本(以谁开端) | |
$ | 表明匹配行尾的文本(以谁结束) |
- 正则表达式里边不需求加引号,不管是数字型仍是字符串型。
- 假如 ^ 和 $ 在一同,表明有必要是准确匹配。
- 假如中括号里边有 ^ ,表明取反的意思,千万和鸿沟符 ^ 区分隔。
var rg = /abc/
// /abc/ 只需包含有 abc 这个字符串回来的都是 true。
console.log(rg.test('abc'))
console.log(rg.test('abcd'))
console.log(rg.test('aabcd'))
var reg = /^abc/
console.log(rg.test('abc')) // true
console.log(rg.test('abcd')) // true
console.log(rg.test('aabcd')) // false
var reg = /^abc$/ // 准确匹配,要求有必要是 abc 字符串才契合标准。
console.log(rg.test('abc')) // true
console.log(rg.test('abcd')) // false
console.log(rg.test('aabcd')) // false
字符类
- []表明有一系列字符可供挑选,只需匹配其间一个就能够了。
所有可供挑选的字符都放在方括号内
。
var rg = /[abc]/ // 只需包含有 a 或者 b 或者包含有 c 都回来 true。
console.log('andy') // true
console.log('body') // true
console.log('color') // true
console.log('red') // false
var rg = /^[abc]$/ // 三选一,只要是 a 或者是 b 或者是 c 这三个字母才回来 true。
console.log('aa') // false
console.log('a') // true
console.log('b') // true
console.log('c') // true
console.log('abc') // false
- [-] 方括号内部规模符-z
var reg = /^[a-z]$/ // 26个英文字母任何一个回来 true。其他的都是 false (包含大写字母)
// - 表明的是 a-z 的规模。
- 字符组合
var reg = /^[a-zA-Z0-9_-]$/ // 26个英文字母(大写和小写都能够)任何一个回来 true。
正则表达式中的量词符
量词符用来设定某个形式呈现的次数
。
量词 | 阐明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
- 多次呈现
var reg = /^[a-zA-Z0-9_-]${6,16}/
// {6,16}之间不能有空格。
// 这个形式能呈现6-16次。
用户名验证
- 功能需求:
- 假如用户名输入合法,则后边提示信息为:用户名合法,而且色彩为绿色。
- 假如用户名输入不合法,则后边提示信息为:用户名不契合标准,而且色彩为赤色。
- 分析:
- 用户名只能为英文字母、数字、下划线或者短横线组成,而且用户名长度为6~16位。
- 首要准备好这种正则表达式形式:
/^[a-zA-Z0-9_-]{6,16}$/
- 当表单失掉焦点时就开端验证。
- 假如契合正则标准,则让后边的 span 标签添加 right 类。
- 假如不契合正则标准,则让后边的 span 标签添加 wrong 类。
<style>
span{
color: #aaa;
font-size: 14px;
}
.right{
color: green;
}
.wrong{
color: red;
}
</style>
<body>
<input type="text" class="uname"><span>请输入用户名</span>
<script>
var uname = document.querySelector('.uname')
var span = document.querySelector('span')
var reg = /^[a-zA-Z0-9_-]{6,16}$/
uname.onblur = function(){
if(reg.test(this.value)){
span.className = 'right'
span.innerHTML = '用户名格式输入正确'
}else{
span.className = 'wrong'
span.innerHTML = '用户名格式输入错误'
}
}
</script>
</body>
括号总结
- 大括号:量词符,里边表明重复次数。
- 小括号:表明优先级。
- 中括号:字符调集,匹配方括号中的恣意字符。
正则表达式中的预界说类
预界说类指的是某些常见形式的简写办法
。
预界说类 | 阐明 |
---|---|
d | 匹配0-9之间的任一数字,相当于[0-9] |
D | 匹配所有0-9以外的字符,相当于[^0-9] |
w | 匹配恣意的字母、数字和下划线,相当于[a-zA-Z0-9_] |
W | 除所有字母、数字和下划线以外的字符,相当于[^a-zA-Z0-9_] |
s | 匹配空格(包含换行符、制表符、空格符等),相当于[trnvf] |
S | 匹配所有非空格的字符,相当于[^trnvf] |
## 正则表达式中的替换 | |
### replace 替换 | |
replace() 办法能够实现替换字符串操作,用来替换的参数能够是一个字符串或是一个正则表达式。 | |
语法:stringObject.replace(regexp/substr,replacement) |
- 第一个参数:被替换的字符串或者正则表达式。
- 第二个参数:替换为的字符串。
- 回来值是一个替换结束的新字符串。
- replace 只能替换第一个需求替换的值。
正则表达式参数
语法:/表达式/[switch]
- switch(也称为修饰符)依照什么样的形式来匹配,有三种值:
- g:大局匹配。
- i:忽略大小写。
- gi:大局匹配,忽略大小写。