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

文章图片
一、正则表达式的书写规则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) | 小括号可以自定匹配确定的模式 |
\. | 转义字符,匹配点 |
限定符主要是正则表达式闭包运算的语法糖,常见的限定符有:
限定符 | 描述 |
* | 重复匹配0次或多次,等价于{0,} |
+ | 重复匹配1次或多次,等价于{1,} |
? | 重复匹配0次或1次,等价于{0,1} |
{n} | 匹配确定的n次 |
{n,} | 至少匹配n次 |
{n,m} | 匹配n到m次,n< m |
创建RegExp对象的方式有两种:
// 创建EegExp对象方式一,第一个参数是表达式,第二个是模式
var reg = new RegExp("\\d*", "gi");
// 方式二:使用/ /包住正则表达式,结尾是模式
var exp = /\d+/g;
其中gi为匹配模式,表示忽略大小写全局匹配,可取值如下:
标志 | 描述 |
i | 忽略大小写 |
g | 全局匹配 |
m | 多行匹配 |
属性名 | 描述 |
global | Boolean,是否全局匹配 |
IgnoreCase | 是否忽略字符大小写 |
LastIndex | 下次匹配的字符串索引位置 |
Multiline | 是否多行匹配 |
Source | 正则表达式字符串 |
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"
推荐阅读
- var functionName=function(){}和functionName=function(){}有什么区别()
- 不理解JS的模块化,JavaScript的模块化是如何演变或发展来的(如何实现?)
- JavaScript有异常和错误处理吗(如何进行异常处理?可以自定义吗?)
- JavaScript中函数调用分别都有哪些方式(对应的使用场景是什么?)
- AngularJS | angular.isString()函数用法介绍
- Python中的numpy.square()用法详细介绍
- 算法设计(过马路所需的最低初始能量)
- 了解C语言中的volatile限定符第2组(示例)
- 算法设计(从未排序的链表中删除重复项)