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

对于正则表达式,不仅可以在JavaScript中使用,在其它语言中同样提供,正则表达式是和语言无关的。什么是正则表达式呢?正则表达式是用于匹配字符串规则的表达式,这个表达式也是用字符串表示,正则表达式主要是处理字符串,它是对字符串操作的一种逻辑运算,使用预定的特殊字符及其组合匹配字符串中的相关字符。

正则表达式有什么用?主要用途有三个方面:检查字符串是否符合正则表达式的某一个规则,例如检查邮箱地址或者手机号码是否符合规则,或者检查密码是否足够复杂。第二个用处就是使用正则表达式从字符串中提取我们想要的部分,例如爬虫,从网上爬取网页数据,可以使用正则表达式从中提取出所有URL。第三个用于就是使用正则表达式匹配指定的字符串,并将符合匹配的部分进行替换操作。

JavaScript正则表达式

一、正则表达式的书写规则

1、正则表达式的基本运算和语法

上面提到,正则表达式是脱离语言而存在的,准确来说,正则表达式有它自己的基本运算规则,这个运算规则可以帮助我们准确理解和使用正则表达式。正则表达式有三种基本运算规则:连接运算、并运算和闭包运算,假设M和N是两个正则表达式:

MN表示连接运算,M和N前后相连,例如AB,匹配目标字符串中的{AB}部分。

M|N表示并运算,M和N组成一个集合,目标字符串中有M或N的部分都会匹配到。

M*或M+表示闭包运算,表示连续匹配M,例如A+表示A至少重复匹配1次。

正则表达式的基本运算

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 匹配分隔字符串,返回数组

使用实例如下:

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"
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?