likes
comments
collection
share

正则表达式总结

作者站长头像
站长
· 阅读数 19

正则表达式概述

  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. 特殊字符非常多,可以参考:

边界符

  • 正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。
边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)
  • 正则表达式里面不需要加引号,不管是数字型还是字符串型。
  • 如果 ^ 和 $ 在一起,表示必须是精确匹配。
  • 如果中括号里面有 ^ ,表示取反的意思,千万和边界符 ^ 区分开。
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匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f]
\S匹配所有非空格的字符,相当于[^\t\r\n\v\f]
## 正则表达式中的替换
### replace 替换
replace() 方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式。
语法:stringObject.replace(regexp/substr,replacement)
  • 第一个参数:被替换的字符串或者正则表达式。
  • 第二个参数:替换为的字符串。
  • 返回值是一个替换完毕的新字符串。
  • replace 只能替换第一个需要替换的值。

正则表达式参数

语法:/表达式/[switch]

  • switch(也称为修饰符)按照什么样的模式来匹配,有三种值:
    1. g:全局匹配。
    2. i:忽略大小写。
    3. gi:全局匹配,忽略大小写。