2.1 概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。用我们自己的话来说: 正则表达式用来校验字符串是否满足一定的规则的公式
2.2 用途
- 模式验证: 检测某个字符串是否符合规则,例如检测手机号、身份证号等等是否符合规范
- 匹配读取: 读取字符串中符合规则的内容
- 匹配替换: 替换字符串中符合规则的内容
2.3 基本语法
2.3.1 正则表达式的组成
正则表达式本身也是一个字符串,它由两种字符组成:
- 普通字符,例如大、小写英文字母;数字等。
- 元字符:被系统赋予特殊含义的字符。例如:^表示以某个字符串开始,$表示以某个字符串结束
2.3.2 字符集合
语法格式 |
示例 |
说明 |
[字符列表] |
正则表达式:[abc] 含义:目标字符串包含abc中的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中的“a”在列表“abc”中 |
目标字符串中任何一个字符出现在字符列表中就算匹配。 |
[^字符列表] |
[^abc] 含义:目标字符串包含abc以外的任何一个字符 目标字符串:plain 是否匹配:是 原因:plain中包含“p”、“l”、“i”、“n” |
匹配字符列表中未包含的任意字符。 |
[字符范围] |
正则表达式:[a-z] 含义:所有小写英文字符组成的字符列表 正则表达式:[A-Z] 含义:所有大写英文字符组成的字符列表 |
匹配指定范围内的任意字符。 |
2.3.3 元字符
在正则表达式中被赋予特殊含义的字符,不能被直接当做普通字符使用。如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”,例如:^
代码 |
说明 |
. |
匹配除换行字符以外的任意字符。 |
\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 |
匹配单词的开始或结束 |
^ |
匹配字符串的开始,但在[]中使用表示取反 |
$ |
匹配字符串的结束 |
2.3.4 出现次数
代码 |
说明 |
* |
出现零次或多次 |
+ |
出现一次或多次 |
? |
出现零次或一次 |
{n} |
出现n次 |
{n,} |
出现n次或多次 |
{n,m} |
出现n到m次 |
2.3.5 用途
① 模式验证
注意:这里是使用正则表达式对象来调用方法。
var reg = /o/;
var str = 'Hello World!';
console.log("/o/.test('Hello World!')=" + reg.test(str));
|
② 匹配读取
注意:这里是使用字符串对象来调用方法。
var resultArr = str.match(reg);
console.log("resultArr.length=" + resultArr.length);
console.log("resultArr[0]=" + resultArr[0]);
|
③ 替换
注意:这里是使用字符串对象来调用方法。
var newStr = str.replace(reg,'@');
console.log("str.replace(reg)=" + newStr);
console.log("str=" + str);
|
④ 全文查找
如果不使用g对正则表达式对象进行修饰,则使用正则表达式进行查找时,仅返回第一个匹配;使用g后,返回所有匹配。
var targetStr = 'Hello World!';
var reg = /[A-Z]/;
var resultArr = targetStr.match(reg);
console.log("resultArr.length=" + resultArr.length);
for(var i = 0; i < resultArr.length; i++){ console.log("resultArr["+i+"]=" + resultArr[i]); }
|
对比
var targetStr = 'Hello World!';
var reg = /[A-Z]/g;
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);
for(var i = 0; i < resultArr.length; i++){ console.log("resultArr["+i+"]="+resultArr[i]); }
|
⑤ 忽略大小写
var targetStr = 'Hello WORLD!';
var reg = /o/g;
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);
for(var i = 0; i < resultArr.length; i++){ console.log("resultArr["+i+"]=" + resultArr[i]); }
|
对比
var targetStr = 'Hello WORLD!';
var reg = /o/gi;
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);
for(var i = 0; i < resultArr.length; i++){ console.log("resultArr["+i+"]="+resultArr[i]); }
|
⑥ 元字符使用
var str01 = 'I love Java'; var str02 = 'Java love me';
var reg = /^Java/g; console.log('reg.test(str01)=' + reg.test(str01)); console.log("<br />"); console.log('reg.test(str02)=' + reg.test(str02));
|
var str01 = 'I love Java'; var str02 = 'Java love me';
var reg = /Java$/g; console.log('reg.test(str01)=' + reg.test(str01)); console.log("<br />"); console.log('reg.test(str02)=' + reg.test(str02));
|
⑦ 字符集合的使用
var targetStr="123456789"; var reg=/^[0-9]{0,}$/;
var b = reg.test(targetStr);
|
var targetStr="HelloWorld"; var reg=/^[a-z0-9A-Z_]{6,16}$/; var b = reg.test(targetStr);
|
2.4 常用正则表达式
需求 |
正则表达式 |
用户名 |
/^[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]+$/ |
手机号码 |
/^1[3-9]\d{9}$/ |