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

目录

导语

1.理解正则表达式

2.模式的规则

3.字符串和正则实例的属性和方法

4.检索实例

5. 小结


导语

正则表达式是处理字符串的一门艺术手法,应用场景常常出如今表单验证部分;
JavaScript高级程序设计一书开篇提到,JavaScript这门语言最原始的应用就是处理输入验证操做,因此正则表达式从JavaScript诞生那一刻就与其结下不解之缘;javascript


1.理解正则表达式

正则表达式(Regular Expression)能够理解为规则表达式,即以表达式的形式定义一项规则,而后根据这一规则去检索字符串,最后根据匹配结果进行后续的处理操做(判断、获取或是替换等);
正则表达式根据建立形式的不一样,可分为字面量和构造函数RegExp对象;
1.1 字面量方法
正则表达式的字面量方法由正则模式(pattern)和修饰符(flags)构成;html

var regExp = /pattern/flags;

1.2 RegExp构造函数
能够经过RegExp这一构造函数去建立一个正则表达式对象;java

var regExp  = new RegExp('pattern','flags')

须要注意的两者不一样在于:字面量采用/pattern/,而正则对象采用"pattern"字符串;因此出现转义字符时,构造函数建立的正则对象的参数须要进行转义;正则表达式

var regExp = /\hello\/;
var regExp1 = new RegExp('\\hello\\');

1.3 flags规则
模式的规则将会在下文单独开一章讲解,先讲述flags规则;
正则表达式能够添加3个修饰符从而起到改变检索规则的做用;数组

g:表示全局模式,检索全部字符串,而不是发现第一个匹配项时中止检索;
i:表示忽略大小写模式;函数

m:表示多行模式,进行多行的检索;spa


2. 模式的规则

模式的规则是正则表达式的核心部分,模式可有普通字符(打印字符和非打印字符)和特殊字符构成;.net

2.1 普通字符
普通字符由全部数字、中外文字母、标点符号和非打印字符构成;
非打印字符包括:设计

\cx:control-x
\n:换行符;
\r:回车符;
\t:制表符;
\v:垂直制表符;
\f:换页符;
\s:空白字符,等价于[\f\n\r\t\v]

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

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

*:匹配前面子表达式任意次,等价于{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
                //13832132341
                var 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=hello

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

5. 小结

经过本文,咱们能够了解到:

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

  • 正则表达式的建立方法能够使用字面量和构造函数形式;两种方法都是由正则模式和修饰符构成,不一样之处在于构造函数须要以字符串形式传参;

  • 修饰符规则部分能够传递三个参数,分别为gim,能够起到改变检索规则的做用;

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

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

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

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

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

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

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


参考资料

相关文章
相关标签/搜索