JavaScript正则表达式高级语法原理分析和应用实例

对于正则表达式,不仅可以在JavaScript中使用,在其它语言中同样提供,正则表达式是和语言无关的。什么是正则表达式呢?正则表达式是用于匹配字符串规则的表达式,这个表达式也是用字符串表示,正则表达式主要是处理字符串,它是对字符串操作的一种逻辑运算,使用预定的特殊字符及其组合匹配字符串中的相关字符。
正则表达式有什么用?主要用途有三个方面:检查字符串是否符合正则表达式的某一个规则,例如检查邮箱地址或者手机号码是否符合规则,或者检查密码是否足够复杂。第二个用处就是使用正则表达式从字符串中提取我们想要的部分,例如爬虫,从网上爬取网页数据,可以使用正则表达式从中提取出所有URL。第三个用于就是使用正则表达式匹配指定的字符串,并将符合匹配的部分进行替换操作。

JavaScript正则表达式高级语法原理分析和应用实例

文章图片
一、正则表达式的书写规则1、正则表达式的基本运算和语法
上面提到,正则表达式是脱离语言而存在的,准确来说,正则表达式有它自己的基本运算规则,这个运算规则可以帮助我们准确理解和使用正则表达式。正则表达式有三种基本运算规则:连接运算、并运算和闭包运算,假设M和N是两个正则表达式:
MN表示连接运算,M和N前后相连,例如AB,匹配目标字符串中的{AB}部分。
M|N表示并运算,M和N组成一个集合,目标字符串中有M或N的部分都会匹配到。
M*或M+表示闭包运算,表示连续匹配M,例如A+表示A至少重复匹配1次。
JavaScript正则表达式高级语法原理分析和应用实例

文章图片
2、正则表达式的元字符
以下提到的元字符和限定符都是正则表达式的语法糖,也就是说很多都是一种简要的写法,但是写法都是基于上面提到的正则表达式的基本运算,元字符是用来代表某一种字符的,例如\d表示所有数字,但是利用上面的规则也可以写成[0-9]的形式,常见的正则表达式元字符有:
元字符 描述
\d 匹配数字
\D 匹配任意非数字
\w 匹配字母、数字或下划线
\W 匹配任意非字母、数字和下划线
\s 匹配任意空白字符
\S 匹配任意非空白字符
.(点) 匹配出换行符以外的单个字符
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
[a-z] 字符集合,匹配26个字母
[^] 匹配除中括号以外的内容
(pattern) 小括号可以自定匹配确定的模式
\. 转义字符,匹配点
3、正则表达式和限定符
限定符主要是正则表达式闭包运算的语法糖,常见的限定符有:
限定符 描述
* 重复匹配0次或多次,等价于{0,}
+ 重复匹配1次或多次,等价于{1,}
? 重复匹配0次或1次,等价于{0,1}
{n} 匹配确定的n次
{n,} 至少匹配n次
{n,m} 匹配n到m次,n< m
二、JS使用正则表达式之RegExp对象使用RegExp对象进行正则表达式匹配的方式有两种:test()方法和exec()方法,test方法用于检测目标字符串中是否存在相应的匹配,返回true或false,exec方法用于查找匹配的字符串,返回一个数组,数组元素为匹配到的字符串。
创建RegExp对象的方式有两种:
// 创建EegExp对象方式一,第一个参数是表达式,第二个是模式 var reg = new RegExp("\\d*", "gi"); // 方式二:使用/ /包住正则表达式,结尾是模式 var exp = /\d+/g;

其中gi为匹配模式,表示忽略大小写全局匹配,可取值如下:
标志 描述
i 忽略大小写
g 全局匹配
m 多行匹配
其中new RegExp中要注意\d需要转义写成\\d,正则表达式对象的属性有:
属性名 描述
global Boolean,是否全局匹配
IgnoreCase 是否忽略字符大小写
LastIndex 下次匹配的字符串索引位置
Multiline 是否多行匹配
Source 正则表达式字符串
RegExp对象的exec方法使用说明:该方法会首先执行一次搜索匹配,返回一个数组或null,执行完一次则自动设置对象的lastIndex属性。对于返回的数组对象,第一个元素是匹配到的字符串,index表示匹配到的以0开始的索引值,input为原来的字符串,exec方式和test方式使用实例如下:
var exp = /[\d]+/g; var str = "Sd4wOPD8sd1f25sd1f"; var array; // 使用test函数检测字符串中是否有匹配的字符串 var hasPattern = exp.test(str); // 返回true console.log(hasPattern); while(array = exp.exec(str)){ console.log(array[0]); } // 输出:8 1 25 1

三、JS使用正则表达式之String字符串对象使用String方法进行正则匹配也是常用的方式,String中提供正则匹配的方法有:match函数、search函数、replace函数和split函数,这些方式的用法描述如下:
方法/函数 描述
Match 查找匹配的对象,返回数组或null
Search 测试匹配,返回匹配的索引或-1
Replace 查找匹配,并进行替换
Split 匹配分隔字符串,返回数组
【JavaScript正则表达式高级语法原理分析和应用实例】使用实例如下:
var string = "bbc radio 4 vue2 react7"; var rep = /[\w\d]+/gi; // 使用serach检测字符串中是否有匹配的字符串模式 var hasPtn = string.search(rep); console.log(hasPtn); // => 0,匹配到的一个字符串的索引 // 使用match匹配字符串 var array = string.match(rep); console.log(array); // bbc radio vue react // 使用replace替换字符串 var newStr = string.replace(/[a-z]+\d/gi, "extra"); // 将字符串接数字的字符串替换 console.log(newStr); // bbc radio 4 extra extra // 使用split分割字符串 var newArray = string.split(/[\s]+/); // 使用空白符分隔字符串 console.log(newArray); // "bbc", "radio", "4", "vue2", "react7"

    推荐阅读