📃个人主页:不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记


RegExp是正则表达式的缩写,使用正则表达式可以对某一个文本进行模式匹配,我们可以把它看成是对字符串描述的一种规则

1.RegExp的定义

  • 直接量语法

语法:/匹配规格/修饰符

  • RegExp对象的语法

语法:new RegExp(匹配规则,修饰符)

// 正则表达式:字符串的匹配规则
			
			// 定义正则表达式,方式1
			let regExp1 = /abc/  /* 判断是否包含字符串abc */
			
			// 定义正则表达式,方式2
			let regExp2 = new RegExp('abc')  /* 判断是否包含字符串abc */

2.RegExp的方法

  • test:检索字符串中指定的值,返回true或者false
  • exec:检索字符串中指定的值,返回找到的值,并且确定它的位置
  • image.png

3.string和正则有关的方法

  • match:找到一个或者多个正则表达式的匹配
  • replace:替换和正则表达式匹配的子串
  • split:把字符串分割为字符串数组
var rep=/abc/; //正则规则是否包含abc
var str='abcdefgabcde'.replace(rep,'x');
console.log(str);

4.修饰符

修饰符描述
i执行对大小写不敏感的匹配
g执行全局匹配

image.png
image.png
image.png

5.元字符

元字符是有特殊含义的字符

字符描述
.匹配除了"\n"以外的任何单个字符
\d匹配一个数字字符
\D匹配一个非数字字符
\s匹配任何空白字符,包括空格,制表符,换页符等
\S匹配任何非空白字符
\w匹配包括下划线的任何单词字符,等价于’[A-Z,a-z,0-9]’
\W匹配任何非单词字符
	
			/* 
				元字符:
				.  表示任意一个字符
				\s 表示空格
				\S 表示非空格
				\d 表示数字
				\D 表示非数字
				\w 表示字母或数字
				\W 表示非字母或数字			 
			 */
			
			let regExp = /\d/
			console.log('aa11bb', regExp.test('aa11bb'))
			
			console.log(/\s/.test('aa11bb'))
			
			console.log(/\w/.test('中国1'))

image.png

6.前后缀

字符描述
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置

			/* 
			   ^: 前缀,表示以什么开头
			   $: 后缀,表示以什么结尾
			 */
			
			console.log(/^\d/.test('abc'), /^\d/.test('ab2c'), /^\d/.test('2abc'))
			console.log(/^a/.test('abc'), /^ac/.test('abc'))
			
			console.log(/a$/.test('abca'), /\d$/.test('abc2'))
			
			//只有ab符合                    //1+数字才符合
			console.log(/^ab$/.test('ab'), /^1\d$/.test('15'))

7.量词

字符描述
+匹配前面的子表达式一次或者多次,比如zo+可以匹配zo以及zoo,但是不可以匹配z
?匹配前面的子表达式零次或者一次。比如do(es)?可以匹配do或does中的do
{n}n是非负整数,匹配确定的n次,比如o{2}不可以匹配Bob中的o,但是可以匹配foot中的两个o
{n,}n是非负整数,至少匹配n次,比如o{2,}不可以匹配Bob中的o,但可以匹配fooood中的所有o.o{1,}等价于o+,o{0,}等价于o
{n,m}m,n都是非负整数,n<=m,最少匹配n次而且最多匹配m次
	/* 
				量词
				+  表示至少1个
				?  表示最多1个
				{n} 表示n个
				{n,} 表示至少n个
				{n, m} 表示n个和m个之间			 
			 */
			
			
			console.log(/\d+/.test('aab2bcc'))
			console.log(/\d?/.test('aabbcc'))
			console.log(/\d{2}/.test('aab5da1dd5bcc'))
			
			console.log(/^1\d{3}$/.test('1342'))

image.png

8.范围

image.png

	/* 
				[xyz], 表示字母的范围,x或y或者z即可
			    [1, 2, 3], 表示数值的范围,在1,2,3取1个
				
				取反
				[^xy], 不能x或者y
				
				[a-z], 表示从a到z, 比如[c-h]
				[A-Z], 表示从A到z
				[1-5], 表示1到5
				
			 */
			
			
			console.log(/[ab]/.test('ac'))
			console.log(/^1[ab]\d$/.test('1ab5'))
			console.log(/[^ab]/.test('ac'))
			
			console.log(/[b-e]/.test('xycz'))
			console.log(/[2-6]/.test('x5ycz'))
			

image.png

9.小练习

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
		<script src="common.js"></script>
		
		<script>
			
			// 需求:判断一个字符串是否是标准的手机号码
			let phone = '18688888888'
			
			let flag = isPhone(phone)
			
			if(flag) {
				// 进行下一步
				alert('正确的手机号码')
			} else {
				// 拦截提示
				alert('请输入正确的手机号码')
			}
			
		</script>
	</head>
	<body>
	</body>
</html>
// 判断一个字符串是否是标准的手机号码
function isPhone(phone) {
	
	// 定义手机号码的正则规则
	 
	//后面八位都是数字
	let regExp = /^1[3,5,8][5,6]\d{8}$/
	
	console.log(phone)
	console.log(regExp.test(phone))
	
	return regExp.test(phone);
}

image.png

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐