JavaScript学习(十二)---正则表达式
目录
正则表达式基础
正则表达式描述了一种字符串匹配的模式,即可让用户通过使用一系列普通字符和特殊字符来构建能够明确描述文本字符串的匹配模式,可以用来检查一个字符串是否含有某种子字符串、将匹配的子字符串做替换或者从某个字符串中取出符合某个条件的子字符串等。
正则表达式的基本结构
一个正则表达式就是由普通字符(如字符a-z)以及特殊字符(称为元字符)组成的文字模式。
语法:/匹配对象的模式/
其中,位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。
例如:在字符串abcd中查找匹配模式bc。代码如下: /bc/
正则表达式的作用
正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下:
1.测试字符串的某个模式
例如:可以对一个输入字符串进行测试,测试该字符串是否存在一个电话号码或一个信用卡号码模式,这称为数据有效性验证。
2.替换文本
可以在文档中使用一个正则表达式来标识特定文字,然后可以将其全部删除,或者替换为别的文字。
3.根据模式匹配从字符串中提取一个子字符串
可以在文本或输入字段中查找特定文字。
正则表达式语法
正则表达式的语法主要是对各个元字符功能的描述。元字符从功能上大致分为模式匹配符、定位符与原义字符、限定符、选择匹配符、特殊字符、字符匹配符、分组组合和反向引用符。
模式匹配符
定义符与原义字符
(1)文本验证定位符
定位符用于规定匹配模式在目标字符中出现的位置。例如,规定匹配模式只能出现在开头或结尾处,这样对文本格式的验证非常有用。
在正则表达式中,有以下几个用于验证文本的定义符。
用“^”匹配目标字符串的开始位置
匹配必须发生在目标字符串的开头处,“^”必须出现在表达式的最前面才具有定位符作用。
例子:匹配字符“^”的使用
<h3>行首匹配字符^的使用</h3> <script type="text/javascript" language="JavaScript"> var reg_expression=/^ming/; //使用行首元字符 var textstring="mingrisoft"; var result=reg_expression.test(textstring); //匹配时返回true,否则返回false document.write("<font size='+1'>"+result+"<br />"); if(result){ document.write("正则表达式/^ming/匹配字符串\""+textstring+"\".<br>"); }else{ alert("未找到匹配的模式!"); } </script>
匹配字符"$"的使用
<h3>行首匹配字符$的使用</h3> <script type="text/javascript" language="JavaScript"> var reg_expression=/ft$/; //使用行首元字符 var textstring="mingrisoft"; var result=reg_expression.test(textstring); //匹配时返回true,否则返回false document.write("<font size='+1'>"+result+"<br />"); if(result){ document.write("正则表达式/ft$/匹配字符串\""+textstring+"\".<br>"); }else{ alert("未找到匹配的模式!"); } </script>
用“\b”匹配一个自边界
“\b”包含了字与空格间的位置,以及目标字符串的开始和结束位置等。
<h3>行首匹配字符\b的使用</h3> <script type="text/javascript" language="JavaScript"> var reg_expression=/\bming\b/; //使用行首元字符 var textstring="ming risoft"; var result=reg_expression.test(textstring); //匹配时返回true,否则返回false document.write("<font size='+1'>"+result+"<br />"); if(result){ document.write("正则表达式//\b ming \b//匹配字符串\""+textstring+"\".<br>"); }else{ alert("未找到匹配的模式!"); } </script>
限定符与选择匹配符
(1)限定符
用“+”限定必须出现一次或连续多次。
例如:“/fo+/”,因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的“fool”、“fo”或者“football”等字母“f”后面连续出现一个或多个字母“o”的字符串相匹配。
用“*”可以限定出现的次数。
用“?”限定最多出现一次。
用“{n}”限定连续出现的次数。
用“{n,}”限定至少出现的次数。
用“{n,m}”限定最少与最多出现的次数。
(2)贪婪匹配与非贪婪匹配
默认情况下,正则表达式使用最长匹配原则,即贪婪匹配原则。
(3)选择匹配符
选择匹配符“|”,用于选择匹配两个选项之中的任意一个,其两个选项是“|”字符两边尽可能最大的表达式
实际应用
(1)普通字符匹配
1.匹配中文字符的正则表达式:
[\u4e00-\u9fa5]
2.匹配双字节字符(包括汉字在内):
[^x00-xff]
3.匹配空行的正则表达式:
n[s|]*r
4.匹配HTML标记的正则表达式:
/<.*>.*</1>|<(.*)/>/
5.匹配首尾空行的正则表达式:
(^s*)|(s*$)
6.匹配网址URL的正则表达式:
http://([w-]+.)+[w-]+(/[w-./?%&=]*)?
7.匹配E-mail地址的正则表达式:
w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
(2)限制表单输入的内容
在网页编程中,经常会用到限制网页表单中的文本框输入内容的情况。下面是一些利用正则表达式来实现这种功能的实例
1.用正则表达式限制只能输入中文:
onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,")" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,"))"
2.用正则表达式限制只能输入数字:
onkeyup="value=value.replace(/[^d]/g,") "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,"))"
3.用正则表达式限制只能输入数字和英文:
onkeyup="value=value.replace(/[W]/g,") "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,"))"
4.用正则表达式限制只能输入全角字符:
onkeyup="value=value.replace(/[^FF00-uFFFF]/g,") "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^FF00-uFFFF]/g,"))"
(3)去掉重复的字符
利用正则表达式可以去掉字符串中重复的字符。
<script type="text/javascript" language="JavaScript"> var s="asfasfafbssli"; var s1=s.replace(/(.).*\1/g,"$1"); var re=new RegExp("["+s1+"]","g"); var s2=s.replace(re,""); alert(s1+s2); </script>
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Centos7 Tomcat9 安装笔记
版权声明:本文由董可伦首发于https://dongkelun.com,非商业转载请注明作者及原创出处。商业转载请联系作者本人。 https://blog.csdn.net/dkl12/article/details/84140327 我的原创地址:https://dongkelun.com/2018/10/23/tomcatConf/ 前言 有两个月没更新博客,部分原因是这两月的工作一直没写Spark程序,而是在写前端,所以虽然期间一直想写但是没有想出从哪方面入手。后端框架用的SpringBoot,前端用的是JSP、BootStrap、Echarts等,前端主要做成了大屏的样子,之前写过一段时间前端,但是没有整理笔记,导致现在再写,有些东西还要去翻原来的代码,比较麻烦,所以一直想整理一些前端的笔记,但是由于不是专业的前端,不是写的很深入,只想把自己实现的的效果对应的代码总结一下,如果只写代码的话,看起来比较单调,所以我想能有写一些前端页面,在博客里放上连接,这样看起来会比较直观。现在的博客用的是hexo,代码托管在coding上,有些页面,比如菜单、整体布局的效果在这上面不太好展现,...
- 下一篇
《阿里巴巴 Java开发手册》读后感
前言 只有光头才能变强 前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦)。 趁着学校校运会,合理地给自己放了一个小长假,然后就回家了。回到家才发现当时618买了一堆书,这堆书还有没撕包装的呢....于是我翻出了最薄的一本《阿里巴巴 Java开发手册》 这本书一共就90多页,一天就可以通读完了,看完之后我又来水博文了。 注意: 书上很多的规范是可以用IDE来避免的,也有很多之前已经知道的了。 所以,这篇文章只记录我认为比较重要,或者说是我之前开发时没有注意到的一些规范(知识点)。 该文章的内容肯定没有书上写得那么全的,如果感兴趣的同学可以去买一本来读一下~ PDF官方地址: https://github.com/alibaba/p3c 一、Java相关 POJO是DO/DTO/BO/VO的统称,禁止命名为xxxPOJO 获取多个对象的方法中list作为前缀 获取统计值的方法用count作为前缀 POJO类中的布尔类型(Boolean)的变量都不要加is前缀,否则部分框架解析会引起序列化错误 如果你的变量名带is的话,比如isActive,框架解...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块