正则表达式之字符串模式匹配实例详解

 更新时间:2022-08-04 01:13:41   作者:佚名   我要评论(0)

目录前言什么是正则表达式字符范围匹配元字符多次重复匹配定位匹配贪婪模式与非贪婪模式表达式分组结语前言
今天我们来学习正则表达式,正则

前言

今天我们来学习正则表达式,正则表达式的应用十分广泛,几乎每个涉及到交互的项目都会用到的,学会正则表达式之后会让你除了提高效率外,会给你带来绝对的成就感。

接下来我们正式开始!

什么是正则表达式

正则表达式是检查、匹配字符串的表达式

正则表达式用来描述某种规则,同时它不是某种语言专有的技术,它对主流的语言都有良好的支持。

正则表达式的主要使用场景是:字符串检验,查找与替换。

示例:检查输入身份证号是否合法的正则表达式

正则表达式:(^\d{18}$)|(^\d{17}(\d|X|x)$)

现在你也许看不懂,但是等看完这篇博客之后在加以练习你就能轻松写出来了。

字符范围匹配

下面这个表是对单个字符约束的一些正则表达式:

正则表达式说明
A精准匹配单个字符
x|y允许出现的2个字符
[xyz]字符集合,允许出现的2个字符
[a-z]字符集合
[^xyz]集合内字符不允许出现

例如:匹配数字范围(0570-0579)

正则表达式为:057[0-9]

元字符

用于匹配的特殊符号又称作元字符

常用的元字符如下:

正则表达式说明
\d匹配任意单个数字
\D匹配\d规则以外的任意单个字符
\w匹配任意单个数字字母下划线
\W匹配\w规则以外的任意单个字符
\s匹配单个空格
\n匹配单个换行符
.匹配任意单个字符(换行符除外)
\.特殊字符只匹配.

示例:请匹配杭州与宁波座机号码(0571|0574-XXXXXXXX)

正则表达式为:057[14]-\d\d\d\d\d\d\d\d

多次重复匹配

当我们匹配的字符串比较长,比如身份证号有18为一个一个写\d比较麻烦,多次重复匹配只能简化我们的操作。

常用的多次重复匹配如下:

正则表达式说明
A{N}精准N次匹配
A{N,}最少出现N次
\d{N,M}最少可以出现N次,最多可以出现M次
\d*可以出现零次至无限次
\d+最少出现一次,相当于{1,}
\d?最多出现1次,相当于{0,1}

示例:匹配全国的座机号(区号3或4位-电话号码7或8位)

正则表达式:\d{3,4}-\d{7,8}

定位匹配

正则表达式说明
^A.*头匹配-以字符A开头
.*A$尾匹配-以字符A结尾
^A.*A$全字匹配-以字符A开头结尾

示例:以C开头,B结尾的字符串

正则表达式:^C.*B$

贪婪模式与非贪婪模式

贪婪模式:在满足条件的情况下尽可能多匹配到字符串
非贪婪模式:在满足条件的情况下尽可能少匹配到字符串

正则表达式在默认的情况下就是贪婪模式

示例:输入123456

  • 在使用正则表达式\d{4,5},之后匹配到的是12345,可见这就是贪婪模式。
  • 在使用正则表达式\d{4,5}?,之后匹配到的是1234,可见这就是非贪婪模式。

可见,只需要在正则表达式的后面加一个?,就可以从贪婪模式变换到非贪婪模式。

表达式分组

分组就是将正则分组为多个子表达式。

示例:abababcdcdcd

正则表达式:(ab){3}(cd){3}

示例:检查输入身份证号是否合法的正则表达式

正则表达式:(^\d{18}$)|(^\d{17}(\d|X|x)$)

结合JavaScript练习正则表达式

在JS中定义正则表达式对象只需要在//之间书写正则表达式即可

我们实现用表单来验证输入姓名和身份证号是否合法。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="#" method="post" id ="frmInfo">
		<div id="err" style="color:red">
			
		</div>
		<div>
			姓名:<input id="name" name="name"/>
		</div>
		<div>
			身份证:<input id ="idno" name="idno"/>
		</div>
		<div>
			<input type = "submit"/>
		</div>
	</form>
	<script type="text/javascript">
		document.getElementById("frmInfo").onsubmit = function(){
			//汉字范围\u4e00-\u9fa5
			var regex1 = /^[\u4e00-\u9fa5]{2,8}$/;
			var regex2 = /^[1234568]\d{16}[0-9xX]$/;
			var name = document.getElementById("name").value;
			var idno = document.getElementById("idno").value;
			//利用正则表达式进行匹配,true-匹配,false-失败 
			if(regex1.test(name) == false){
				document.getElementById("err").innerHTML = "无效姓名";
				return false;
			}else if(regex2.test(idno) == false){
				document.getElementById("err").innerHTML = "无效身份证号";
				return false;
			}else{
				alert("验证通过,准备提交!");
				return true;
			}
		}
	</script>
</body>
</html>

输出:

结语

多加练习之后,书写起来还是比较简单的。而且很有成就感。加油!

到此这篇关于正则表达式之字符串模式匹配的文章就介绍到这了,更多相关正则表达式字符串模式匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 正则表达式匹配不包含某些字符串的技巧
  • 正则表达式模式匹配字符串基础知识
  • 使用正则表达式匹配[***]样式的字符串

相关文章

  • 正则表达式之字符串模式匹配实例详解

    正则表达式之字符串模式匹配实例详解

    目录前言什么是正则表达式字符范围匹配元字符多次重复匹配定位匹配贪婪模式与非贪婪模式表达式分组结语前言 今天我们来学习正则表达式,正则
    2022-08-04
  • 正则表达式中问号(?)的正确用法详解

    正则表达式中问号(?)的正确用法详解

    目录1、直接跟随在子表达式后面2、非贪婪匹配3、非获取匹配4、断言参考资料:正则表达式中“?”的用法大概有以下几种 1、直接跟随
    2022-08-04
  • 利用正则表达式匹配浮点型数据

    利用正则表达式匹配浮点型数据

    目录前言:正则表达式Java代码附:正则表达式(同时匹配整型数和浮点数)总结前言: 在开发中我们常常会使用到正则表达式,但很奇怪的是,每
    2022-08-04
  • jsp中文乱码问题的简单解决方法

    jsp中文乱码问题的简单解决方法

    简单解决jsp中文乱码问题 初学jsp制作一个简单的响应页面 具体代码如下: <form action="test.jsp"> username : <input type="text" nam
    2022-08-04
  • 关于react ant 组件 Select下拉框 值回显的问题

    关于react ant 组件 Select下拉框 值回显的问题

    目录react ant组件Select下拉框值回显问题情形解决得问题react ant-design Select组件下拉框map不显示问题描述问题总结react ant组件Select下
    2022-08-04
  • Java?限制前端重复请求的实例代码

    Java?限制前端重复请求的实例代码

    目录背景及用途实现步骤背景及用途 前端页面出现卡顿,用户反复点击操作按钮,导致后台接口短时间内多次提交 实现步骤 设置切面,增加注解,导
    2022-08-04
  • React路由拦截模式及withRouter示例详解

    React路由拦截模式及withRouter示例详解

    目录一、路由拦截二、路由模式三、withRouter一、路由拦截 在前面两篇 路由博客基础上,我们将ReactRouter.js的我的profile路由设置成路由拦
    2022-08-04
  • Spring超详细讲解IOC与解耦合

    Spring超详细讲解IOC与解耦合

    目录前言一.所谓耦合二.Spring三.核心IOC理解1.容器2.控制反转3.依赖注入四.Bean的实例化1.无参构造2.工厂静态方法3.工厂实例方法(常用)五
    2022-08-04
  • Java与SpringBoot对redis的使用方式

    Java与SpringBoot对redis的使用方式

    目录1.Java连接redis1.1 使用Jedis1.2 使用连接池连接redis1.3 java连接redis集群模式 2.SpringBoot整合redis2.1 StringRedisTemplate2.2 Re
    2022-08-04
  • 从reflect?metadata理解Nest实现原理

    从reflect?metadata理解Nest实现原理

    目录正文入口Module 引入模块CatsService操作数据库Reflect Metadata那元数据存在哪呢?nest 的源码:总结正文 Nest 是 Node.js 的服务端框架
    2022-08-04

最新评论