正则表达式

本文详细介绍了正则表达式的基本概念、语法、常用操作符和定位符,以及在JavaScript中的创建和使用方法。通过实例展示了如何在JavaScript中进行字符串匹配、替换和分割等操作。此外,还提供了正则表达式的实践练习,帮助读者巩固理解。
摘要由CSDN通过智能技术生成

一.啥是正则表达式

正则表达式(regular expression)是一个描述字符模式的对象,一般的用于检验字符串

二.正则表达式的语法

1.常用的普通字符

正则表达式含义
[]表示任意一个字符
[abc]表示a、b、c中任意一个字符(表示该字符是a或b或c)
[^abc]除了a、b、c的任意一个字符(表示该字符不能是a或b或c)
[a-z]表示从a到z中的任意一个字符(表示任意一个小写英文字母
[h-z]表示从h到z中的任意一个字符(表示从h到z中的任意一个小写英文字母)
[A-Z]表示从A到Z中的任意一个字符(表示任意一个大写英文字母)
[1234]表示1、2、3、4中任意一个字符(表示该字符是1或2或3或4)
[^1234]除了1、2、3、4的任意一个字符(表示该字符不能是1或2或3或4)
[0-9]表示从0到9中的任意一个字符(表示任意一个数字)
[a-zA-Z0-9_]表示a到zA到Z0到9以及下滑线中的任意一个字符
[a-z&&[^bc]]表示**a到z**中**除了b、c**的任意一个字符,&&表示“与”的关系

2.常用的转义字符

正则表达式含义
.表示任意一个字符
\d表示任意一个数字字符,相当于[0-9]
\D表示任意一个非数字字符,相当于 [^0-9]
\s表示任意一个空白字符,包括空格、制表符、换页符等等。
\S表示任意一个非空白字符,相当于[`^`\s]
\w表示任意一个单词字符,相当于[a-zA-Z0-9_]
\W表示任意一个非单词字符,相当于[^\w]

3.常用限定符

正则表达式含义
表示前面的内容出现0到1次(\w?表示出现0-1个单词字符)
*表示前面的内容出现0到多次(\d*表示出现任意次数字)
+表示前面的内容出现1到多次(\s+表示至少出现一个空白)
{n}表示前面的字符重复n次(\d{11}表示出现11位数字)
{n,}表示前面的字符至少重复n次(\d{11,}表示出现11位或以上数字)
{n,m}表示前面的字符至少重复n次,并且小于等于m次,即X>=n && X<=m([a-zA-Z0-9]{6,15}表示数字和字母的组合出现6-15位)

4.常用定位符

正则表达式含义
^表示字符串必须以其后面约束的内容开始。当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合
$表示字符串必须以其前面约束的内容结尾

5.练习:

能够匹配数字: \d+
能够匹配三位数字:\d{3}
至少匹配三位数字:\d{3,}
能够匹配到3到6位数字:\d{3,6}
能够匹配到正整数:/^[1-9]\d*$/
能够匹配到负整数:/^-[1-9]\d*$/
能够匹配到非正整数:/^[1-9]\d*|0$/
能够匹配到负整数:/^-[1-9]\d*|0$/
12个月的正则表达式:/^[0][1-9]|[1][0-2]$/
验证日期格式(2021-07-09):/^[2][0]\d{2}-([0][1-9]|[1][0-2])-([0][1-9]|[3][0-1]|[1-2]\d)$/


三.创建正则表达式

1.var box = new RegExp('box');                   第一个参数字符串

2.var box = new RegExp('box', 'ig');             第二个参数可选模式修饰符

修饰符描述
i执行对大小写不敏感的匹配
g执行全局匹配
m执行多行匹配
<script type="text/javascript">
			/* 1.字符串中不用加开始结束的/,但是表达式正文中的\必须使用\\,进行转义才能生效。 */
			//var reg1 = /^[0-9]{3,6}$/;          //3-6位数字
			var reg1 = /^\d{3,6}$/;               //3-6位数字
			console.log(reg1);                  
			console.log(reg1.toString());         // /^\d{3,6}$/
			//var reg2=new RegExp("^[0-9]{3,6}$");//3-6位数字
			var reg2 = new RegExp("^\\d{3,6}$");  //3-6位数字
			console.log(reg2);                   
			console.log(reg2.toString());         // /^\d{3,6}$/
		
		</script>

四.正则表达式的方法

1.RegExpObject.test() 方法

检测一个字符串是否匹配当前正则表达式,如果字符串中有匹配的值返回 true ,否则返回 false。 即如果字符串string中含有与RegExpObject匹配的文本则返回true,否则返回false。

<script type="text/javascript">
			var reg = /hello/i;
			var a = reg.test('hello,world')
			var a1 = reg.test('add')
			console.log(a);						//true
			console.log(a1);                    //false
			
			var reg1 = /^[1-9]\d{4,}$/;			
			var b = reg1.test('123434')
			console.log(b);						//true
			
			var reg2 = new RegExp('^[1-9]\\d{4,}$');  
			var c = reg2.test(12311);
			console.log(c);						//true
			
			var reg3 = /^[1][358]\d{9}$/;   //前后同时产生(严格匹配)
			// var reg3 = /^[1][358]\d{9}/;		从头开始
			// var reg3 = /[1][358]\d{9}$/;		从后面开始
			// var reg3 = /[1][358]\d{9}/;		前后都不写
			var d = reg3.test("13456756412")
			console.log(d);						//true
			
			
		</script>

2.RegExpObject.exec() 方法

检索字符串中的正则表达式的匹配,如果字符串中有匹配的值返回该匹配值,否则返回 null

<script type="text/javascript">
			var reg = /hello/gi;
			var a = reg.exec('hello ddd world');
			var b = reg.exec('woshui shi wi');
			console.log(b);						// null
			console.log(a);						// ["hello", index: 0, input: "hello ddd world"]
			console.log(a.toString());			// hello
		</script>

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

1.stringObj.search()

检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。返回与指定查找的字符串或者正则表达式相匹配的首个String 对象起始位置。如果没有找到任何匹配的子串,则返回 -1。

<script type="text/javascript">
			/* 1.search方法可使用字符串作为参数,字符串参数会转换为正则表达式 */
			var str = "what is the matter with you";
			var n2 = str.search("the");
			console.log(n2);			//8
			
			/* 2.使用正则表达式搜索"is"字符串,且不区分大小写 */
			var str = "what is the matter with you";
			var n = str.search(/is/i); 
			console.log(n);    			//1
			
			/* 3.获取与正则表达式reg相匹配的首个String对象起始位置 */
			var reg = /a[t]+/i;
			var str = "what is the matter with you "
			var n = str.search(reg);
			console.log(n); //2
		
		</script>

2.stringObj.split(bystr ,limit)

   把一个字符串分割成字符串数组。该方法不改变原始字符串。 
   如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。 
   bystr 可选**字符串**或**正则表达式**,从该参数指定的地方分割 stringObj。 
   limit可选,该参数可**指定返回的数组的最大长度**。
   如果设置了该参数,返回的子串不会多于这个参数指定的数组。
   如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 

<script type="text/javascript">
		/* 1.用字符串分割,并指定返回的数组的最大长度为3 */
		var str = "How are you doing today?";
		var n = str.split(" ", 3);
		console.log(n);							 // ["How", "are", "you"]
		console.log(n.toString()); 				//How,are,you
		
		/* 2.用正则表达式分割,并指定返回的数组的最大长度为3 */
		var str = "How are you doing today?";
		var n = str.split(/\s/, 3);   			// \s表示任意一个空格
		console.log(n);  						// ["How", "are", "you"]
		console.log(n.toString()); 				//How,are,you
		
		</script>

3.stringObj.replace(findstr,tostr)

在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。该方法不会改变原始字符串。 返回一个新的字符串,是用 tostr 替换了 findstr的第一次匹配或所有匹配之后得到的

<script type="text/javascript">
			var str = 'How are you doing today';
			var str1 = str.replace(/o/i,'oo');
			var str2 = str.replace(/o/g,'oo');
			console.log(str);				// How are you doing today
			console.log(str1);				// Hoow are you doing today
			console.log(str2);				// Hoow are yoou dooing tooday
		</script>

4.stringObj.match(regexp)

   在字符串内检索指定的值,或找到一个或多个正则表达式的匹配 
   match() 方法将检索字符串 StringObj,以找到一个或多个与 regexp 匹配的文本
   这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g
   如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配
   如果没有找到任何匹配的文本, match() 将返回 null
   否则,它将**返回一个数组**,其中存放了与它找到的匹配文本有关的信息

<script type="text/javascript">
			var str = "The rain in SPAIN stays mainly in the plain";
			var str1 = str.match(/ain/g);
			console.log(str1);					//["ain", "ain", "ain"]
			console.log(str1.toString());		//["ain", "ain", "ain"]
			
			/* 不区分大小写 */
			var str2 = str.match(/ain/gi)
			console.log(str2);					// ["ain", "AIN", "ain", "ain"]
			console.log(str2.toString());		// ain,AIN,ain,ain
			
		</script>

练习:
1.有字符串var str = "abc123de45f6"; 运用正则表达式实现如下结果:
返回数字的首字符位置索引;将所有的数字替换为*;将所有的字母a替换为#;返回其中所有数字组成的数组

<script type="text/javascript">
             //用正则表达式的方法

			var str = "abc123de45f6";
			var str1 = '';
			var reg = /\d/;
			var count = str.search(/\d/i)
			console.log(count);						//  3
			var str1 = str.replace(/\d/g,'*')
			console.log(str1);						//  abc***de**f*
			var str2 = str.replace(/a/g,'#');
			console.log(str2);						//#bc123de45f6
			var str3 = str.match(/\d/gi);
			console.log(str3);						// ["1", "2", "3", "4", "5", "6"]
		</script>
<script type="text/javascript">
            //用普通的方法
			var str = "abc123de45f6";
			var str1 = '';  	    /* 数字变成*号 */
			var str2 = '';	    	/* 将字符串a变成# */
			var str3 = '';			/* 将数字提取出来变成新数组 */
			var reg = /\d+/;
			for(var i = 0;i<str.length;i++){
				var res = reg.test(str[i])
				if(res == true){
					console.log(i);
					str1 = str1 + '*';
					str3 = str3 + str[i]
				} else {
					str1 = str1 + str[i]
				}
				
				if(str[i] == 'a'){
					str2 = str2 + '#';
				}else{
					str2 = str2 + str[i];
				}
				
			}
			console.log(str1);
			console.log(str2);
			console.log(str3);
		</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值