首页 > 编程笔记 > JavaScript笔记
	 阅读:178
	JavaScript正则表达式的用法(附带实例)
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
通常来讲,正则表达式就是用来校验字符串是否满足一定规则的公式。
正则表达式的作用主要包括模式验证、匹配读取、匹配替换,具体如下:
1) 对象形式:
2) 直接量形式:
另外,正则表达式本身也是一个字符串,它由两种字符组成:普通字符和元字符:
正则表达式的字符集合包括以下三种不同的语法格式,如下表所示:
	
		
在正则表达式中被赋予特殊含义的字符,不能被直接当作普通字符使用。常见的元字符如下表所示。
	
		
如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”,例如“\^”。还有一些常见的元字符,表示出现的次数,如下表所示。
	
		
正则表达式可以用于校验用户名、密码等是否符合要求,常用的正则表达式如下表所示:
	
		
正则表达式中没有使用全局匹配的情况如下:
借助 /g 使用了全局匹配后,示例代码如下:
再例如,判断以下两个字符串“I love Java”和“Java love me”是否以 Java 结尾:
例如,判断字符串“HelloWorld”是否匹配含有数字或字母或下画线的 6~16 位的正则表达式:
	
	
通常来讲,正则表达式就是用来校验字符串是否满足一定规则的公式。
正则表达式的作用主要包括模式验证、匹配读取、匹配替换,具体如下:
- 模式验证:检测某个字符串是否符合规则,如检测手机号、身份证号等是否符合规范;
- 匹配读取:读取字符串中符合规则的内容;
- 匹配替换:替换字符串中符合规则的内容。
JavaScript正则表达式基本语法
定义正则表达式,包括对象形式和直接量形式两种。1) 对象形式:
// 类似创建数组可以使用 new Array(),创建对象可以使用 new Object()
var reg = new RegExp("a");
2) 直接量形式:
// 类似创建数组可以使用 [],创建对象可以使用 {}
var reg = /a/;
另外,正则表达式本身也是一个字符串,它由两种字符组成:普通字符和元字符:
- 普通字符如大、小写英文字母、数字等;
- 元字符指被系统赋予特殊含义的字符。例如,^表示以某个字符串开始,$表示以某个字符串结束。
正则表达式的字符集合包括以下三种不同的语法格式,如下表所示:
| 语法格式 | 示例 | 说明 | 
|---|---|---|
| [字符列表] | 正则表达式[a-z]:表示目标字符串包含abc中的任何一个字符则匹配成功。如目标字符串为 plain,判断是否匹配,结果匹配成功,因为 plain 中的“a”在列表“abc”中 | 目标字符串中任何一个字符出现在字符列表中就算匹配 | 
| [^字符列表] | 正则表达式[^abc]:表示目标字符串包含 abc 以外的任何一个字符则匹配成功。如目标字符串为plain,判断是否匹配,结果匹配成功,因为 plain 中包含“p”、“l”、“i”、“n” | 匹配字符列表之外的任意字符 | 
| [字符范围] | 正则表达式 [a-z]:匹配所有小写英文字母组成的字符串列表 | 匹配指定范围内的任意字符 | 
| [^字符范围] | 正则表达式 [A-Z]:匹配所有大写英文字母组成的字符串列表 | 匹配指定范围外的任意字符 | 
在正则表达式中被赋予特殊含义的字符,不能被直接当作普通字符使用。常见的元字符如下表所示。
| 元字符 | 说明 | 
|---|---|
| . | 匹配除换行字符以外的任意字符 | 
| \w | 匹配字母或数字或下画线等价于[a-zA-Z0-9_] | 
| \W | 匹配任何非单词字符。等价于[^a-zA-Z0-9_] | 
| \s | 匹配任意的空白符,包括空格、制表符、换页符等。等价于[\f\n\r\t\v] | 
| \S | 匹配任何非空白字符。等价于[^\n\r\t\f\v] | 
| \d | 匹配数字。等价于[0-9] | 
| \D | 匹配一个非数字字符。等价于[^0-9] | 
| \b | 匹配单词的开始或结束 | 
| \^ | 匹配字符串的开始,但由中使用表示取反 | 
| \$ | 匹配字符串的结束 | 
如果要匹配元字符本身,需要对元字符进行转义,转义的方式是在元字符前面加上“\”,例如“\^”。还有一些常见的元字符,表示出现的次数,如下表所示。
| 表示出现次数的元字符 | 说明 | 
|---|---|
| * | 出现零次或多次 | 
| + | 出现一次或多次 | 
| ? | 出现零次或一次 | 
| {n} | 出现n次 | 
| {n,} | 出现n次或多次 | 
| {n,m} | 出现n到m次 | 
正则表达式可以用于校验用户名、密码等是否符合要求,常用的正则表达式如下表所示:
| 校验内容 | 正则表达式 | 
|---|---|
| 校验用户名 | /^\[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]+$/ | 
JavaScript正则表达式的应用
下面通过具体场景应用正则表达式,包括模式验证、匹配读取、全文查找等方面。1) 模式验证
// 创建一个最简单的正则表达式对象
var reg = /o/;
// 创建一个字符串对象作为目标字符串
var str = 'Hello World!';
// 调用正则表达式对象的 test() 方法验证目标字符串是否满足指定的这个模式
// 返回结果 true
console.log("/o/.test('Hello World!')="+reg.test(str));
注意,这里使用正则表达式对象来调用方法。2) 匹配读取
// 在目标字符串中查找匹配的字符,返回匹配结果组成的数组
var resultArr = str.match(reg);
console.log("resultArr.length="+resultArr.length);//数组长度为 1
console.log("resultArr[0]="+resultArr[0]);//数组内容是 o
注意,这里使用字符串对象来调用方法。3) 替换
var newStr = str.replace(reg,'@');
// 只有第一个 o 被替换了,说明我们这个正则表达式只能匹配第一个满足的字符串
console.log("str.replace(reg)="+newStr);//Hello World!
// 原字符串并没有变化,只是返回了一个新字符串
console.log("str="+str);//str=Hello World!
注意,这里使用字符串对象来调用方法。4) 全文查找
正则表达式中“/g”表示全文查找。例如,判断目标字符串“Hello World!”中大写字母的个数。正则表达式中没有使用全局匹配的情况如下:
// 目标字符串
var targetStr = 'Hello World!';
// 没有使用全局匹配的正则表达式
var reg = /[A-Z]/;
// 获取全部匹配
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);//数组长度为 1
// 遍历数组,发现只能得到'H'
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
借助 /g 使用了全局匹配后,示例代码如下:
// 目标字符串
var targetStr = 'Hello World!';
// 使用了全局匹配的正则表达式
var reg = /[A-Z]/g;
// 获取全部匹配
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);//数组长度为 2
// 遍历数组,发现可以获取'H' 和 'W'
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
对比以上两种情况,如果不使用 g 对正则表达式对象进行修饰,则使用正则表达式进行查找时,仅返回第一个匹配;使用 g 后,返回所有匹配。5) 忽略大小写
正则表达式中“/i”表示忽略大小写。例如,判断目标字符串“Hello WORLD!”中包含小写字母 o 的个数,不忽略大小写的示例代码如下:
// 目标字符串
var targetStr = 'Hello WORLD!';
// 没有使用忽略大小写的正则表达式
var reg = /o/g;
// 获取全部匹配
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);//数组长度为 1
// 遍历数组,仅得到'o'
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
借助 i 忽略大小写后,查找到 o 和 O 两个结果:
// 目标字符串
var targetStr = 'Hello WORLD!';
// 使用了忽略大小写的正则表达式
var reg = /o/gi;
// 获取全部匹配
var resultArr = targetStr.match(reg);
console.log("resultArr.length="+resultArr.length);//数组长度为 2
// 遍历数组,得到'o'和'O'
for(var i = 0; i < resultArr.length; i++){
    console.log("resultArr["+i+"]="+resultArr[i]);
}
6) 元字符的使用
例如,判断以下两个字符串“I love Java”和“Java love me”是否以 Java 开头:
var str01 = 'I love Java';
var str02 = 'Java love me';
// 匹配以 Java 开头
var reg = /^Java/g;
console.log('reg.test(str01)='+reg.test(str01)); // false
console.log("<br />");
console.log('reg.test(str02)='+reg.test(str02)); // true
再例如,判断以下两个字符串“I love Java”和“Java love me”是否以 Java 结尾:
var str01 = 'I love Java';
var str02 = 'Java love me';
// 匹配以 Java 结尾
var reg = /Java$/g;
console.log('reg.test(str01)='+reg.test(str01)); // true
console.log("<br />");
console.log('reg.test(str02)='+reg.test(str02)); // false
7) 字符集合的使用
例如,判断字符串“123456789”是否匹配 n 位数字的正则表达式:
// n 位数字的正则
var targetStr="123456789";
var reg=/^[0-9]{0,}$/;
// 或者 var reg=/^\d*$/;
var b = reg.test(targetStr); // true
例如,判断字符串“HelloWorld”是否匹配含有数字或字母或下画线的 6~16 位的正则表达式:
// 数字+字母+下画线,6-16 位
var targetStr="HelloWorld";
var reg=/^[a-z0-9A-Z_]{6,16}$/;
var b = reg.test(targetStr); // true
 
	 ICP备案:
 ICP备案: 公安联网备案:
 公安联网备案: