JavaScript标准库系列——RegExp对象(三)
目录
导语
1.理解正则表达式
2.模式的规则
3.字符串和正则实例的属性和方法
4.检索实例
5. 小结
导语
正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分;
JavaScript高级程序设计一书开篇提到,JavaScript这门语言最原始的应用就是处理输入验证操作,所以正则表达式从JavaScript诞生那一刻就与其结下不解之缘;
1.理解正则表达式
正则表达式(Regular Expression)可以理解为规则表达式,即以表达式的形式定义一项规则,然后根据这一规则去检索字符串,最后根据匹配结果进行后续的处理操作(判断、获取或是替换等);
正则表达式根据创建形式的不同,可分为字面量和构造函数RegExp对象;
1.1 字面量方法
正则表达式的字面量方法由正则模式(pattern)和修饰符(flags)构成;
var regExp = /pattern/flags;
1.2 RegExp构造函数
可以通过RegExp这一构造函数去创建一个正则表达式对象;
var regExp = new RegExp('pattern','flags')
需要注意的二者不同在于:字面量采用/pattern/
,而正则对象采用"pattern"
字符串;所以出现转义字符时,构造函数创建的正则对象的参数需要进行转义;
var regExp = /\hello\/;
var regExp1 = new RegExp('\\hello\\');
1.3 flags规则
模式的规则将会在下文单独开一章讲解,先讲述flags
规则;
正则表达式可以添加3个修饰符从而起到改变检索规则的作用;
g:表示全局模式,检索所有字符串,而不是发现第一个匹配项时停止检索;
i:表示忽略大小写模式;
m:表示多行模式,进行多行的检索;
2. 模式的规则
模式的规则是正则表达式的核心部分,模式可有普通字符(打印字符和非打印字符)和特殊字符构成;
2.1 普通字符
普通字符由所有数字、中外文字母、标点符号和非打印字符构成;
非打印字符包括:
\cx:control-x
\n:换行符;
\r:回车符;
\t:制表符;
\v:垂直制表符;
\f:换页符;
\s:空白字符,等价于[\f\n\r\t\v]
2.2 特殊字符
所谓特殊字符,就是具有特殊含义的字符,包括:限定符、定位符、类型符、分组符、条件符、非获取匹配符等
限定符
限定符限定一个正则表达式出现次数;
*:匹配前面子表达式任意次,等价于{0,};
+:匹配前面子表达式1次以上,等价于{1,};
?:匹配前面子表达式0次或1次,等价于{0,1};
{n}:匹配子表达式n次;
{n,}:匹配子表达式n次以上;
{n,m}:匹配子表达式n~m次之间,默认是贪婪模式取m次,当在该限定符后面添加?开启非贪婪模式;这个?可应用于所有限定符后;
定位符
定位符能够高效匹配到字符出现位置;
^:匹配字符串开始的位置,注意在[]中表示取反匹配;
$:匹配字符串结尾的位置;
\b:匹配字符边界;
类型符
类型符是小羊自己为了记忆方便定义的,就是可以匹配不同的数据类型;
.:匹配除换行符的任意字符;
\w:匹配任何单词字符,等价于[a-zA-z0-9];
\d:匹配数字;
分组符
():将表达式放入圆括号成为子表达式;
条件符
|:分支条件,匹配位于|两侧的字表达,相当于或;
非获取匹配符
非获取匹配符指的是匹配表达式但不获取匹配结果;
(?:pattern):匹配 pattern 但不获取匹配结果;
(?=pattern):正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串;
(?!pattern):负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串
取反操作
下面这几个都是对应先前特殊字符的取反操作;
\D
\W
\B
\S
[^pattern]
反向引用
对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式;
Is is the cost of of gasoline going up up?
/\b([a-z]+) \1\b/gi
匹配Is is和up up
3.字符串和正则实例的属性和方法
3.1 字符串的方法
match:接受正则表达式,返回匹配结果;
replace:接受两个参数,第一个为正则,第二个为替换值(也可以是一个函数),返回新字符串,不改变原字符串;
3.2 正则实例的属性和方法
正则实例的属性
正则实例的属性主要包括ignoreCase、global、multiline返回是否设置修饰符的布尔值,lastIndex返回下一次开始搜索的位置,source返回正则表达式的字符串形式;
正则实例的属性
test:传入一个字符串,返回布尔值表示匹配结果的判断;带有修饰符g时,每一次test方法都从上一次结束的位置开始向后匹配;
exec:传入一个字符串,返回匹配结果的数组;
3.检索实例
下面根据目前常用的表单验证时用到的正则,给出几个检索的案例;解;
3.1 手机号码检索
function isPhoneNum(str){//020-80723000//07518869865//13832132341var regExp = /^0\d{2}[-]?\d{8}|^0\d{3}[-]?\d{7}|^1\d{10}/return regExp.test(str);};
3.2 E-mail检索
function isEmail(str){var regExp = /^[a-zA-Z]\w*@[0-9a-zA-Z]+\.[a-zA-Z]+/;return regExp.test(str)};
3.3 密码检索
function isValidPassword(str){//长度6-20个字符,包括大写字母、小写字母、数字、下划线至少两种if(/\W*/.test(str)){return false}else if(/\w{0,5}|\w{21,}/.test(str)){return false;}else if(/^\d+$|^[a-zA-Z]$|^_+$/.test(str)){return false}else{return true;}}
3.4 用户名的检索
function isValidUsername(str){//长度为6-20个字符,只能包括字母数字和下划线var regExp = /^\w{6,20}$/return regExp.test(str);};
3. 5 Url检索
https://www.baidu.com:8080/index.html#q=hellohttps:// ([a-zA-Z]*:\/\/)?
www.baidu.com \S+
:8080 (:\d*)?
/ \/
index.html \S*
#q=hello (#.*)?
5. 小结
通过本文,我们可以了解到:
正则表达式可以理解为根据规定的规则,去检索字符串然后根据匹配结果进行后续的处理,处理可以包括判断、获取和替换;
正则表达式的创建方法可以使用字面量和构造函数形式;两种方法都是由正则模式和修饰符构成,不同之处在于构造函数需要以字符串形式传参;
修饰符规则部分可以传递三个参数,分别为
g
、i
和m
,可以起到改变检索规则的作用;模式规则作为正则表达式,由普通字符和特殊字符构成;
普通字符包括打印字符和非打印字符;
特殊字符即那些具有特殊含义的字符,主要包括
限定符
、定位符
、类型符
、分组符
、分组符
、条件符
、非获取匹配符
等;正则表达式以实例形式出现时,拥有自己的属性和方法,并且字符串的一些方法与正则表达式也存在密切的关系;
字符串的方法包括:
match
和replace
方法;正则实例的属性和方法包括:
ignonreCase
、global
、multiline
、test
和exec
等;最后给出了几个正则表达式的应用实例,包括
手机号码、密码、用户名、E-mail和URL检索
;
参考资料
《JavaScript高级程序设计(第3版)》
《JavaScript标准参考教程》——阮一峰
饥人谷课件
正则表达式30分钟入门教程
菜鸟教程
JavaScript标准库系列——RegExp对象(三)相关推荐
- JavaScript权威指南7(四) 第十一章 JavaScript 标准库
Set和Map类 用于表示一组值以及从一组值到另一组值的映射. set 是值得集合,就像数组.但不同于数组,set 没有被排序或索引,并且它们不允许重复:值要么是集合的成员要么不是集合的成员,不能知道 ...
- 《JavaScript权威指南第7版》第11章 JavaScript标准库
第11章 JavaScript标准库 11.1 Set和Map 11.1.1 Set类 11.1.2 Map类 11.1.3 WeakMap和WeakSet 11.2 类型数组和二进制数据 11.2. ...
- JavaScript权威指南 第11章JavaScript标准库
JavaScript权威指南 第11章JavaScript标准库 第11章 JavaScript标准库 11.1 集合与映射 11.1.1 Set类 11.1.2 Map类 11.1.3 WeakMa ...
- 18Python标准库系列之logging模块
Python标准库系列之logging模块 This module defines functions and classes which implement a flexible event log ...
- [转载] python标准库系列教程(三)——operator库详细教程
参考链接: Python中的Inplace运算符| 2(ixor(),iand(),ipow()等) python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 Python基础学习:oper ...
- python标准类型内建函数_Python 标准库系列之内建函数
Python的强大有很大一部分是因为其庞大的标准库提供了各式各样的功能,基本上日常使用中你所需要的功能都可以从中找到,从而大大减轻开发人员的压力,节省开发人员的时间,因此,要想更好的使用python, ...
- 彻底弄懂Python标准库源码(三)—— pprint模块
目录 模块整体注释 依赖模块导入.对外暴露接口 saferepr函数--返回对象的字符串表示,并为无限递归数据结构提供保护 isreadable函数--返回对象的是否"可读" is ...
- python解析xml文件选用模块_Python标准库系列之xml模块
Python's interfaces for processing XML are grouped in the xml package. 带分隔符的文件仅有两维的数据:行和列.如果你想在程序之间交 ...
- python标准库有pickle_Python标准库05 存储对象 (pickle包,cPickle包)-阿里云开发者社区...
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我 ...
最新文章
- ADPRL - 近似动态规划和强化学习 - Note 6 - Mitigating the Curse of Dimensionality
- 人类的思维方式有哪些?【达克效应】
- 阿里面试官:说说Redis主从复制原理
- css笔记 - transition学习笔记(二)
- php实现cookie加密解密
- centos重启网络失败Job for network.service failed,ping不通网络
- TCP-IP详解:重传机制
- sevlet表单处理无法相应问题及web.xml配置.
- CentOS中怎样安装mysql并修改密码、设置开机启动、配置远程连接
- javascript的关于刷新页面给出提示框的代码
- 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
- Windows10 VS2017 C++模拟点击按键
- 1.5 基础数据类型 -- 字典与集合
- apache自定义虚拟主机日志格式
- 教你如何使用ip地址进行高精度定位
- 无线路由器和计算机怎么连接网络连接,猫连接无线路由器
- Python学习之路-爬虫(四大名著)
- 云杰恒指:6.11恒指期货实盘指导交易复盘
- C++/MFC修行之路(5)Ribbon(功能区)的使用
- Nginx Window假死状态
热门文章
- hdu 1495 非常可乐 (bfs)
- 分布式日志收集系统--Chukwa
- 计算机维护方面的知识和技巧,电脑硬件维护常识和方法【图文详解】
- python打破循环_python – 为什么“c.execute(…)”打破循环?
- Nvidia的CUDA库现在恢复使用了
- 分享Kali Linux 2017年第12周镜像文件
- HTTP基础认证Basic Authentication
- Swift3.0语言教程使用指针创建和初始化字符串
- iOS移除父控件中所有子控件的两种方式
- python实现简单爬虫功能(网站图片)