正则表达式是对字符串操作的一种逻辑公示,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式有三个主要用途:
对象形式:var reg = new RegExp("正则表达式") 当正则表达式中有"/"时使用这种形式。
直接量形式:var reg = /正则表达式/ 一般使用这种声明方式
正则表达式的入门
如果不使用g对正则表达式对象进行修饰,则使用正则表达式进行查找时,仅返回第一个匹配;使用g后,返回所有匹配。
// 匹配读取:读取一个字符串中的第一个'l'字母// g表示全文查找,如果不使用g就只能查找到第一个匹配的内容// 1. 编写一个正则表达式var reg2 = /l/g// 2. 使用正则表达式读取字符串var array = str.match(reg2)console.log(array.length)
// 匹配读取:读取一个字符串中的第一个'l'字母// i表示ignore忽略大小写,如果不使用i就表示精确区分大小写,加了i就不区分大小写// 1. 编写一个正则表达式var reg2 = /l/i// 2. 使用正则表达式读取字符串var array = str.match(reg2)console.log(array.length)
精确匹配和模糊匹配
不使用多行查找模式,目标字符串中不管有没有换行符都会被当做一行。
多行查找
在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”。
| 代码 | 说明 |
|---|---|
| . | 匹配除换行字符以外的任意字符。 |
| \w | 匹配字母或数字或下划线等价于[a-zA-Z0-9_] |
| \W | 匹配任何非单词字符。等价于[^a-zA-Z0-9_] |
| \s | 匹配任意的空白符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v] |
| \S | 匹配任何非空白字符。等价于[^\f\n\r\t\v] |
| \d | 匹配数字。等价于[0-9] |
| \D | 匹配一个非数字字符。等价于[^0-9] |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开始,但在[]中使用表示取反 |
| $ | 匹配字符串的结束 |
练习
| 语法格式 | 示例 | 说明 |
|---|---|---|
[字符列表] | [abc] | 目标字符串中任何一个字符出现在字符列表中就算匹配成功。 |
[^字符列表] | [^abc] | 匹配字符列表中未包含的任意字符。 |
[字符范围] | [a-z] | 匹配指定范围内的任意字符。 |
var str01 = 'Hello World';
var str02 = 'I am Tom';
//匹配abc中的任何一个
var reg = /[abc]/g;
console.log('reg.test(str01)='+reg.test(str01));
console.log('reg.test(str02)='+reg.test(str02));
| 代码 | 说明 |
|---|---|
| * | 出现零次或多次 |
| + | 出现一次或多次 |
| ? | 出现零次或一次 |
| {n} | 出现n次 |
| {n,} | 出现n次或多次 |
| {n,m} | 出现n到m次 |
console.log("/[q]{3}/.test('qq')="+/[q]{3}/g.test('qq')); // flase
console.log("/[q]{3}/.test('qqq')="+/[q]{3}/g.test('qqq')); // true
console.log("/[q]{3}/.test('qqqq')="+/[q]{3}/g.test('qqqq')); // true
使用符号:“|”
// 目标字符串
var str01 = 'Hello World!';
var str02 = 'I love Java';
// 匹配'World'或'Java'
var reg = /World|Java/g;
console.log("str01.match(reg)[0]="+str01.match(reg)[0]);
console.log("str02.match(reg)[0]="+str02.match(reg)[0]);
| 需求 | 正则表达式 |
|---|---|
| 用户名 | /^\[a-zA-Z\_][a-zA-Z_\-0-9]{5,9}$/ |
| 密码 | /^[a-zA-Z0-9_\-\@\#\&\*]{6,12}$/ |
| 前后空格 | /^\s+|\s+$/g |
| 电子邮箱 | /^[a-zA-Z0-9_\.-]+@([a-zA-Z0-9-]+[\.]{1})+[a-zA-Z]+$/ |