094_正则表达式

1. 什么是正则表达式?

1.1. 正则表达式是构成搜索模式(search pattern)的字符序列。

1.2. 当您搜索文本中的数据时, 您可使用搜索模式来描述您搜索的内容。

1.3. 正则表达式可以是单字符或者更复杂的模式。

1.4. 正则表达式可用于执行所有类型的文本搜索和文本替换操作。

1.5. 语法

/pattern/modifiers;

2. 正则表达式修饰符

3. 方括号

3.1. 方括号用于查找某个范围内的字符:

 4. 量词

5. 元字符

5.1. 元字符(Metacharacter)是拥有特殊含义的字符:

6. 支持正则表达式的String对象的方法

7. 修饰符例子

7.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>修饰符</title>
	</head>
	<body>
		<script type="text/javascript">
			var str1 = 'He nan ruan jian bao dian ke ji you xian gong si。Ta wei yu he nan sheng zheng zhou shi。Ta zhu yao jing ying hu lian wang zai xian jiao yu、hu lian wang dian shang he hu lian wang you xi deng deng。Ta xian zai zhu yao de chan pin shi ruan jian bao dian wang、he nan shang cheng、shou ji nong chang Unity you xi he shou ji xiao xiao le Unity you xi deng deng。Ruan jian bao dian wang mu qian yi jing fu wu yu 100 duo suo he nan gao xiao, 200000 duo wan de gao xiao xue sheng he lao shi, yi gong you 30 duo wan yong hu le。He nan';
			document.write('<b style="color: green;">' + str1.replace(/he nan/g, '<i style="color: red;">he nan</i>').replace(/He nan/g, '<i style="color: red;">He nan</i>') + '</b><br /><br />');
			
			var r1 = str1.match(/he nan/);
			var r2 = str1.match(/he nan/i);
			var r3 = str1.match(/he nan/m);
			var r4 = str1.match(/he nan/g);
			var r5 = str1.match(/he nan/im);
			var r6 = str1.match(/he nan/ig);
			var r7 = str1.match(/he nan/mg);
			var r8 = str1.match(/he nan/img);
			document.write('<b>匹配模式是: /he nan/</b>, 匹配结果: ' + r1 + '<br />');
			document.write('<b>匹配模式是: /he nan/i</b>, 匹配结果: ' + r2 + '<br />');
			document.write('<b>匹配模式是: /he nan/m</b>, 匹配结果: ' + r3 + '<br />');
			document.write('<b>匹配模式是: /he nan/g</b>, 匹配结果: ' + r4 + '<br />');
			document.write('<b>匹配模式是: /he nan/im</b>, 匹配结果: ' + r5 + '<br />');
			document.write('<b>匹配模式是: /he nan/ig</b>, 匹配结果: ' + r6 + '<br />');
			document.write('<b>匹配模式是: /he nan/mg</b>, 匹配结果: ' + r7 + '<br />');
			document.write('<b>匹配模式是: /he nan/img</b>, 匹配结果: ' + r8 + '<br /><br />');

			var r9 = str1.match(/^he nan/);
			var r10 = str1.match(/^he nan/i);
			var r11 = str1.match(/^he nan/m);
			var r12 = str1.match(/^he nan/g);
			var r13 = str1.match(/^he nan/im);
			var r14 = str1.match(/^he nan/ig);
			var r15 = str1.match(/^he nan/mg);
			var r16 = str1.match(/^he nan/img);
			document.write('<b>匹配模式是: /^he nan/</b>, 匹配结果: ' + r9 + '<br />');
			document.write('<b>匹配模式是: /^he nan/i</b>, 匹配结果: ' + r10 + '<br />');
			document.write('<b>匹配模式是: /^he nan/m</b>, 匹配结果: ' + r11 + '<br />');
			document.write('<b>匹配模式是: /^he nan/g</b>, 匹配结果: ' + r12 + '<br />');
			document.write('<b>匹配模式是: /^he nan/im</b>, 匹配结果: ' + r13 + '<br />');
			document.write('<b>匹配模式是: /^he nan/ig</b>, 匹配结果: ' + r14 + '<br />');
			document.write('<b>匹配模式是: /^he nan/mg</b>, 匹配结果: ' + r15 + '<br />');
			document.write('<b>匹配模式是: /^he nan/img</b>, 匹配结果: ' + r16 + '<br /><br />');

			var r17 = str1.match(/he nan$/);
			var r18 = str1.match(/he nan$/i);
			var r19 = str1.match(/he nan$/m);
			var r20 = str1.match(/he nan$/g);
			var r21 = str1.match(/he nan$/im);
			var r22 = str1.match(/he nan$/ig);
			var r23 = str1.match(/he nan$/mg);
			var r24 = str1.match(/he nan$/img);
			document.write('<b>匹配模式是: /he nan$/</b>, 匹配结果: ' + r17 + '<br />');
			document.write('<b>匹配模式是: /he nan$/i</b>, 匹配结果: ' + r18 + '<br />');
			document.write('<b>匹配模式是: /he nan$/m</b>, 匹配结果: ' + r19 + '<br />');
			document.write('<b>匹配模式是: /he nan$/g</b>, 匹配结果: ' + r20 + '<br />');
			document.write('<b>匹配模式是: /he nan$/im</b>, 匹配结果: ' + r21 + '<br />');
			document.write('<b>匹配模式是: /he nan$/ig</b>, 匹配结果: ' + r22 + '<br />');
			document.write('<b>匹配模式是: /he nan$/mg</b>, 匹配结果: ' + r23 + '<br />');
			document.write('<b>匹配模式是: /he nan$/img</b>, 匹配结果: ' + r24 + '<br /><br />');

			var r25 = str1.match(/^he nan$/);
			var r26 = str1.match(/^he nan$/i);
			var r27 = str1.match(/^he nan$/m);
			var r28 = str1.match(/^he nan$/g);
			var r29 = str1.match(/^he nan$/im); // m在多行匹配的行首和行尾匹配中显得特别有用
			var r30 = str1.match(/^he nan$/ig);
			var r31 = str1.match(/^he nan$/mg);
			var r32 = str1.match(/^he nan$/img);
			document.write('<b>匹配模式是: /^he nan$/</b>, 匹配结果: ' + r25 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/i</b>, 匹配结果: ' + r26 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/m</b>, 匹配结果: ' + r27 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/g</b>, 匹配结果: ' + r28 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/im</b>, 匹配结果: ' + r29 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/ig</b>, 匹配结果: ' + r30 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/mg</b>, 匹配结果: ' + r31 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/img</b>, 匹配结果: ' + r32 + '<hr />');

			var str2 = 'He nan ruan jian bao dian ke ji you xian gong si。Ta wei yu\r\nhe nan sheng zheng zhou shi。Ta zhu yao jing ying hu lian wang zai xian jiao yu、hu lian wang dian shang he hu lian wang you xi deng deng。\r\nTa xian zai zhu yao de chan pin shi ruan jian bao dian wang、he nan\r\nshang cheng、shou ji nong chang Unity you xi he shou ji xiao xiao le Unity you xi deng deng。Ruan jian bao dian wang mu qian yi jing fu wu yu 100 duo suo he nan\r\ngao xiao, 200000 duo wan de gao xiao xue sheng he lao shi, yi gong you 30 duo wan yong hu le。\r\nHe nan';
			document.write('<b style="color: green;">' + str2.replace(/\r\n/g, '<br />').replace(/he nan/g, '<i style="color: red;">he nan</i>').replace(/He nan/g, '<i style="color: red;">He nan</i>') + '</b><br /><br />');

			r1 = str2.match(/he nan/);
			r2 = str2.match(/he nan/i);
			r3 = str2.match(/he nan/m);
			r4 = str2.match(/he nan/g);
			r5 = str2.match(/he nan/im);
			r6 = str2.match(/he nan/ig);
			r7 = str2.match(/he nan/mg);
			r8 = str2.match(/he nan/img);
			document.write('<b>匹配模式是: /he nan/</b>, 匹配结果: ' + r1 + '<br />');
			document.write('<b>匹配模式是: /he nan/i</b>, 匹配结果: ' + r2 + '<br />');
			document.write('<b>匹配模式是: /he nan/m</b>, 匹配结果: ' + r3 + '<br />');
			document.write('<b>匹配模式是: /he nan/g</b>, 匹配结果: ' + r4 + '<br />');
			document.write('<b>匹配模式是: /he nan/im</b>, 匹配结果: ' + r5 + '<br />');
			document.write('<b>匹配模式是: /he nan/ig</b>, 匹配结果: ' + r6 + '<br />');
			document.write('<b>匹配模式是: /he nan/mg</b>, 匹配结果: ' + r7 + '<br />');
			document.write('<b>匹配模式是: /he nan/img</b>, 匹配结果: ' + r8 + '<br /><br />');

			r9 = str2.match(/^he nan/);
			r10 = str2.match(/^he nan/i);
			r11 = str2.match(/^he nan/m);
			r12 = str2.match(/^he nan/g);
			r13 = str2.match(/^he nan/im);
			r14 = str2.match(/^he nan/ig);
			r15 = str2.match(/^he nan/mg);
			r16 = str2.match(/^he nan/img);
			document.write('<b>匹配模式是: /^he nan/</b>, 匹配结果: ' + r9 + '<br />');
			document.write('<b>匹配模式是: /^he nan/i</b>, 匹配结果: ' + r10 + '<br />');
			document.write('<b>匹配模式是: /^he nan/m</b>, 匹配结果: ' + r11 + '<br />');
			document.write('<b>匹配模式是: /^he nan/g</b>, 匹配结果: ' + r12 + '<br />');
			document.write('<b>匹配模式是: /^he nan/im</b>, 匹配结果: ' + r13 + '<br />');
			document.write('<b>匹配模式是: /^he nan/ig</b>, 匹配结果: ' + r14 + '<br />');
			document.write('<b>匹配模式是: /^he nan/mg</b>, 匹配结果: ' + r15 + '<br />');
			document.write('<b>匹配模式是: /^he nan/img</b>, 匹配结果: ' + r16 + '<br /><br />');

			r17 = str2.match(/he nan$/);
			r18 = str2.match(/he nan$/i);
			r19 = str2.match(/he nan$/m);
			r20 = str2.match(/he nan$/g);
			r21 = str2.match(/he nan$/im);
			r22 = str2.match(/he nan$/ig);
			r23 = str2.match(/he nan$/mg);
			r24 = str2.match(/he nan$/img);
			document.write('<b>匹配模式是: /he nan$/</b>, 匹配结果: ' + r17 + '<br />');
			document.write('<b>匹配模式是: /he nan$/i</b>, 匹配结果: ' + r18 + '<br />');
			document.write('<b>匹配模式是: /he nan$/m</b>, 匹配结果: ' + r19 + '<br />');
			document.write('<b>匹配模式是: /he nan$/g</b>, 匹配结果: ' + r20 + '<br />');
			document.write('<b>匹配模式是: /he nan$/im</b>, 匹配结果: ' + r21 + '<br />');
			document.write('<b>匹配模式是: /he nan$/ig</b>, 匹配结果: ' + r22 + '<br />');
			document.write('<b>匹配模式是: /he nan$/mg</b>, 匹配结果: ' + r23 + '<br />');
			document.write('<b>匹配模式是: /he nan$/img</b>, 匹配结果: ' + r24 + '<br /><br />');

			r25 = str2.match(/^he nan$/);
			r26 = str2.match(/^he nan$/i);
			r27 = str2.match(/^he nan$/m);
			r28 = str2.match(/^he nan$/g);
			r29 = str2.match(/^he nan$/im);
			r30 = str2.match(/^he nan$/ig);
			r31 = str2.match(/^he nan$/mg);
			r32 = str2.match(/^he nan$/img);
			document.write('<b>匹配模式是: /^he nan$/</b>, 匹配结果: ' + r25 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/i</b>, 匹配结果: ' + r26 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/m</b>, 匹配结果: ' + r27 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/g</b>, 匹配结果: ' + r28 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/im</b>, 匹配结果: ' + r29 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/ig</b>, 匹配结果: ' + r30 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/mg</b>, 匹配结果: ' + r31 + '<br />');
			document.write('<b>匹配模式是: /^he nan$/img</b>, 匹配结果: ' + r32);
		</script>
	</body>
</html>

7.2. 效果图

8. 括号例子

8.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>括号</title>
	</head>
	<body>
		<script type="text/javascript">
			var str1 = 'Ruan jian bao dian wang fu wu yu 100 duo suo gao xiao, 200000 duo wan de gao xiao xue sheng he lao shi, yi gong you 30 duo wan yong hu le。';

			var r1 = str1.match(/[0-9A-Za-z]/);
			var r2 = str1.match(/[^0-9A-Za-z]/);

			var r3 = str1.match(/(gao xiao)/);
			var r4 = str1.match(/(gao xiao|bao dian)/);
			var r5 = str1.match(/(gao xiao)/g);
			var r6 = str1.match(/(gao xiao|bao dian)/g);
			document.write('匹配结果: ' + r1 + '<br />匹配位置: ' + r1.index + '<br />匹配(查找)的字符串: ' + r1.input + '<hr />');
			document.write('匹配结果(是一个空格): ' + r2 + '<br />匹配位置: ' + r2.index + '<br />匹配(查找)的字符串: ' + r2.input + '<hr />');

			document.write('匹配结果: ' + r3[0] + '<br />匹配的正则表达式的子表达式: ' + r3[1] + '<br />匹配位置: ' + r3.index + '<br />匹配(查找)的字符串: ' + r3.input + '<hr />');
			document.write('匹配结果: ' + r4[0] + '<br />匹配的正则表达式的子表达式: ' + r4[1] + '<br />匹配位置: ' + r4.index + '<br />匹配(查找)的字符串: ' + r4.input + '<hr />');
			document.write('匹配结果: ' + r5 + '<br />');
			document.write('匹配结果: ' + r6 + '<hr />');

			var r7 = str1.replace(/[1-9]0+/, '5');
			var r8 = str1.replace(/[1-9]0*/, '5');
			var r9 = str1.replace(/[1-9]0?/, '5');
			document.write('匹配结果: ' + r7 + '<br />');
			document.write('匹配结果: ' + r8 + '<br />');
			document.write('匹配结果: ' + r9 + '<hr />');

			var r10 = str1.replace(/[1-9]0+/, '$&');
			var r11 = str1.replace(/[1-9]0*/, '$`');
			var r12 = str1.replace(/[1-9]0?/, "$'");
			document.write('使用与正则表达式匹配的字符串替换匹配字符串结果: ' + r10 + '<br />');
			document.write('使用与正则表达式匹配的左侧字符串替换匹配字符串结果: ' + r11 + '<br />');
			document.write('使用与正则表达式匹配的右侧字符串替换匹配字符串结果: ' + r12 + '<hr />');

			var r13 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$1');
			var r14 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$2');
			var r15 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$3');
			var r16 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$4');
			var r17 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$5');
			var r18 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$6');
			var r19 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, '$7');
			document.write('匹配结果: ' + r13 + '<br />');
			document.write('匹配结果: ' + r14 + '<br />');
			document.write('匹配结果: ' + r15 + '<br />');
			document.write('匹配结果: ' + r16 + '<br />');
			document.write('匹配结果: ' + r17 + '<br />');
			document.write('匹配结果: ' + r18 + '<br />');
			document.write('匹配结果: ' + r19 + '<br />');
			var r20 = str1.replace(/(\s|\w)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w|,)*(1|2|3)0*(\s|\w)*/g, function(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){
				document.write('与正则表达式匹配的字符串: ' + p1 + '<br />');
				document.write('第一个匹配的位置: ' + p9 + '<br />');
				document.write('原字符串: ' + p10 + '<br />');
				return 'nima';
			});
			document.write('匹配结果: ' + r20 + '<br />');
		</script>
	</body>
</html>

8.2. 效果图

9. 元字符例子

9.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>元字符</title>
	</head>
	<body>
		<script type="text/javascript">
			var str1 = 'Ruan jian bao dian wang fu wu yu 100 duo suo gao xiao 200000 duo wan de gao xiao xue sheng he lao shi yi gong you 30 duo wan yong hu le。';

			// search()方法不执行全局匹配, 它将忽略标志g。
			var r1 = str1.search(/0{2}/);
			document.write('匹配位置: ' + r1 + '<br />');
			var r2 = str1.search(/0{3,6}/);
			document.write('匹配位置: ' + r2 + '<br />');
			var r3 = str1.search(/0{4,}/);
			document.write('匹配位置: ' + r3 + '<hr />');

			var r4 = str1.match(/(gao xiao)(?=(\sxue sheng))/);
			document.write('匹配字符: ' + r4[0] + ' 匹配位置: ' + r4.index + '<br />');
			document.write('存储的子表达式匹配结果: [' + RegExp.$1 + '], [' + RegExp.$2 + '], [' + RegExp.$3 + ']<br /><br />');
			var r5 = str1.match(/(gao xiao)(?!( xue sheng))/);
			document.write('匹配字符: ' + r5[0] + ' 匹配位置: ' + r5.index + '<br />');
			document.write('存储的子表达式匹配结果: [' + RegExp.$1 + '], [' + RegExp.$2 + '], [' + RegExp.$3 + ']<hr />');

			var r8 = '+-*/\n123\rabc'.match(/./g);
			document.write(r8 + '<hr />');

			var r9 = str1.split(/\w{6,}/g);
			document.write(r9 + '<br />');
			var r10 = str1.split(/\W/g, 5);
			document.write(r10 + '<br />');
			var r11 = str1.split(/\d+/g);
			document.write(r11 + '<br />');
			var r12 = str1.split(/\s/g, 5);
			document.write(r12 + '<br />');
			var r13 = str1.split(/\b\s\b/);
			document.write(r13 + '<hr />');
		
			var r14 = '1\v2'.search(/\s/);
			document.write('\\s匹配垂直制表符的位置: ' + r14 + '<br />');
			var r15 = '1\f2'.search(/\s/);
			document.write('\\s匹配换页符的位置: ' + r15 + '<br />');
			var r16 = '1\t2'.search(/\s/);
			document.write('\\s匹配制表符的位置: ' + r16 + '<br />');
			var r17 = '1\r2'.search(/\s/);
			document.write('\\s匹配回车符的位置: ' + r17 + '<br />');
			var r18 = '1\n2'.search(/\s/);
			document.write('\\s匹配换行符的位置: ' + r18 + '<br />');
			var r19 = '1 2'.search(/\s/);
			document.write('\\s匹配空格的位置: ' + r19 + '<br />');
			var r20 = '1	2'.search(/\s/);
			document.write('\\s匹配tab键的位置: ' + r20 + '<hr />');

			var r21 = str1.match(/\b/);
			document.write('匹配字符: ' + r21[0] + ' 匹配位置: ' + r21.index + '<br />');
			var r22 = 'School MySchool'.match(/\BSchool/);
			document.write('匹配字符: ' + r22[0] + ' 匹配位置: ' + r22.index + '<br />');
			var r23 = str1.match(/\u3002/);
			document.write('匹配字符: ' + r23[0] + ' 匹配位置: ' + r23.index + '<br />');
		</script>
	</body>
</html>

9.2. 效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值