资讯专栏INFORMATION COLUMN

JavaScript标准库系列——RegExp对象(三)

邱勇 / 1589人阅读

摘要:目录导语理解正则表达式模式的规则字符串和正则实例的属性和方法检索实例小结导语正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分高级程序设计一书开篇提到,这门语言最原始的应用就是处理输入验证操作,所以正则表达式从诞生那一刻就

目录 导语 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

:换行符;

:回车符;
	:制表符;
v:垂直制表符;
f:换页符;
s:空白字符,等价于[f

	v]

2.2 特殊字符
所谓特殊字符,就是具有特殊含义的字符,包括:限定符、定位符、类型符、分组符、条件符、非获取匹配符等

限定符
限定符限定一个正则表达式出现次数;

*:匹配前面子表达式任意次,等价于{0,};
+:匹配前面子表达式1次以上,等价于{1,};
?:匹配前面子表达式0次或1次,等价于{0,1};
{n}:匹配子表达式n次;
{n,}:匹配子表达式n次以上;
{n,m}:匹配子表达式n~m次之间,默认是贪婪模式取m次,当在该限定符后面添加?开启非贪婪模式;这个?可应用于所有限定符后;

定位符
定位符能够高效匹配到字符出现位置;

^:匹配字符串开始的位置,注意在[]中表示取反匹配;
$:匹配字符串结尾的位置;
:匹配字符边界;

类型符
类型符是小羊自己为了记忆方便定义的,就是可以匹配不同的数据类型;

.:匹配除换行符的任意字符;
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?
/([a-z]+) 1/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
                //13832132341
                var regExp = /^0d{2}[-]?d{8}|^0d{3}[-]?d{7}|^1d{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=hello

https://   ([a-zA-Z]*://)?
www.baidu.com   S+
:8080   (:d*)?
/   /
index.html   S*
#q=hello   (#.*)?
5. 小结

通过本文,我们可以了解到:

正则表达式可以理解为根据规定的规则,去检索字符串然后根据匹配结果进行后续的处理,处理可以包括判断、获取和替换;

正则表达式的创建方法可以使用字面量和构造函数形式;两种方法都是由正则模式和修饰符构成,不同之处在于构造函数需要以字符串形式传参;

修饰符规则部分可以传递三个参数,分别为gim,可以起到改变检索规则的作用;

模式规则作为正则表达式,由普通字符和特殊字符构成;

普通字符包括打印字符和非打印字符;

特殊字符即那些具有特殊含义的字符,主要包括限定符定位符类型符分组符分组符条件符非获取匹配符等;

正则表达式以实例形式出现时,拥有自己的属性和方法,并且字符串的一些方法与正则表达式也存在密切的关系;

字符串的方法包括:matchreplace方法;

正则实例的属性和方法包括:ignonreCaseglobalmultilinetestexec等;

最后给出了几个正则表达式的应用实例,包括手机号码、密码、用户名、E-mail和URL检索

参考资料

《JavaScript高级程序设计(第3版)》

《JavaScript标准参考教程》——阮一峰

饥人谷课件

正则表达式30分钟入门教程

菜鸟教程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86742.html

相关文章

  • JavaScript标准系列——大包装对象(四)

    摘要:目录导语包装对象的理解三大包装对象的知识点小结导语包装对象是为了弥补基本数据类型的非对象特性而产生的,对于基本类型值而言,本来是不存在属性和方法的,但是我们可以在使用字面量创建字符串时,调用例如的方法,那么其内在原理究竟是什么呢阅读完本篇文 目录 导语 1. 包装对象的理解 2. 三大包装对象的知识点 3. 小结 导语 包装对象是为了弥补基本数据类型的非对象特性而产生的,对于基本类型...

    sean 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • 怪异的JavaScript系列()

    摘要:本文的思想源自于在上的演讲。我收集这些例子的主要目的是将它们整理并清楚理解它们的原理。着主要是因为大括号也是函数定义语法的一部分。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件等众多知名用户的认可。 译者按: JavaScript有很多坑,经常一不小心就要写bug。 原文: What the f*ck JavaScript? 译者: Fundebug 为了保证可读性...

    XboxYan 评论0 收藏0
  • JavaScript进阶学习(一)—— 基于正则表达式的简单js模板引擎实现

    摘要:基本语法构造函数可创建一个正则表达式对象,用特定的模式匹配文本。要表示字符串,字面量形式不使用引号,而传递给构造函数的参数使用引号。当使用构造函数创造正则对象时,需要常规的字符转义规则在前面加反斜杠。结果替换与正则表达式匹配的子串。 文章来源:小青年原创发布时间:2016-06-26关键词:JavaScript,正则表达式,js模板引擎转载需标注本文原始地址: http://zhaom...

    Magicer 评论0 收藏0
  • 聊聊 JavaScript 中的 Date 对象

    摘要:一起来看看中的日期对象。对象和其他对象如等一样,对象是语言中的内建对象。在工作中,对象有着许多重要的应用。这意味着,当前时间与标准时区相差小时。,全称是国际标准化组织,负责制定全世界工商业国际标准的国际标准。 原文地址: http://www.wemlion.com/2016/d... 时间的发现 日常生活中,各种形式的时间字符到处都是。 时间观念的产生,时间单位、计时工具的发明,给人...

    adie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<