本文已参与「新人创造礼」活动, 一同开启创造之路。

正则表达式概述

  1. 什么是正则表达式?
    • 正则表达式(Regular Expression)是用于匹配字符串中字符组合的形式。在JavaScript中,正则表达式也是目标。
    • 正则表达式通常被用来检索、替换那些契合某个形式(规矩)的文本,例如表单验证:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中能够输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些灵敏词(替换),或从字符串中获取咱们想要的特定部分(提取)等。
    • 其他言语也会运用正则表达式,但是这主要是利用 JavaScript 正则表达式完成表单验证。

正则表达式的特色

  1. 灵活性、逻辑性和功能性十分强。
  2. 能够迅速的用极简单的办法达到字符串的复杂控制。
  3. 关于刚触摸的人来说,比较晦涩难懂。比方:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$这是验证邮箱的表达式。
  4. 实践开发,一般都是直接仿制写好的正则表达式。但是要求会运用正则表达式而且依据实践情况修改正则表达式。比方用户名:/^[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)

  • 主要效果:
    1. regexobj 是写的正则表达式。
    2. str 是咱们要测验的文本。
    3. 便是检测 str 文本是否契合咱们写的正则表达式标准。

正则表达式中的特别字符

正则表达式的组成

  1. 一个正则表达式能够由简略的字符构成,比方 /abc/ ,也能够是简略和特别字符的组合,比方 /ab*c/ 。其间特别字符也被称为元字符,在正则表达式中是具有特别含义的专用符号,如 ^ 、$ 、+ 等。
  2. 特别字符十分多,能够参阅:
    • 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

字符类

  1. []表明有一系列字符可供挑选,只需匹配其间一个就能够了。所有可供挑选的字符都放在方括号内
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
  1. [-] 方括号内部规模符-z
var reg = /^[a-z]$/	// 26个英文字母任何一个回来 true。其他的都是 false (包含大写字母)
// - 表明的是 a-z 的规模。
  1. 字符组合
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次。

用户名验证

  • 功能需求:
    1. 假如用户名输入合法,则后边提示信息为:用户名合法,而且色彩为绿色。
    2. 假如用户名输入不合法,则后边提示信息为:用户名不契合标准,而且色彩为赤色。
  • 分析:
    1. 用户名只能为英文字母、数字、下划线或者短横线组成,而且用户名长度为6~16位。
    2. 首要准备好这种正则表达式形式:/^[a-zA-Z0-9_-]{6,16}$/
    3. 当表单失掉焦点时就开端验证。
    4. 假如契合正则标准,则让后边的 span 标签添加 right 类。
    5. 假如不契合正则标准,则让后边的 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>

括号总结

  1. 大括号:量词符,里边表明重复次数。
  2. 小括号:表明优先级
  3. 中括号:字符调集,匹配方括号中的恣意字符。

正则表达式中的预界说类

预界说类指的是某些常见形式的简写办法

预界说类 阐明
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(也称为修饰符)依照什么样的形式来匹配,有三种值:
    1. g:大局匹配。
    2. i:忽略大小写。
    3. gi:大局匹配,忽略大小写。