正则表达式

处理字符串的利器.主要作用是判断字符串中是否含有符合正则表达式匹配规则的片段

创建

方法1:

var reg = /abc/

方法2:

var reg = new RegExp('abc')

正则表达式修饰符

g:全局匹配

var reg1 = /a/;
var reg2 = /a/g;
var str = 'abcda';
str.match(reg1);//结果是一个数组['a']
str.match(reg2);//结果是一个数组['a','a']
//所谓全局匹配就是会匹配整个字符串中所有符合规则的片段,而不只是简简单单的找到第一个符合的字符串片段就结束匹配.

i:忽略大小写

var rge1 = /abc/;
var reg2 = /abc/i;
var str = /aBcd/;
reg1.test(str);//结果为false
reg2.test(str);//结果为true
//所谓忽略大小写就是指匹配规则不受字符大小写影响.

m:多行匹配

var reg1 = /^a/g;
var reg2 = /^a/gm;
var str = 'abcd\na';
str.match(reg1);//结果是一个数组['a']
str.match(reg2);//结果是一个数组['a','a']

[]

一个[]表示一位,[]里面的内容是规定这一位可以取值的范围.例如[1-9]表示这一位的取值范围是1-9数字.

注意:^写在[]表示非的意思,写在[]表示以这个字符开头

var reg1 = /[0-9]/g
var str = 'ab1cd2';
str.match(reg1)//结果是['1','2'];
var reg2 = /[^abc]/g
var str2 = 'abcd';
str2.match(reg2)//结果是['d']

()

var reg = /(abc|bcd)/g;
var str = 'abc';
var str2 = 'ab';
reg.test(str)//结果为true
reg.test(str2)//结果为false

元字符

拥有特殊含义的字符.一个元字符也只代表一位

元字符 描述
. 匹配除了换行符之外的所有字符
\w 匹配数字,字母,下划线
\W 匹配不是数字,字母以及下划线
\d 匹配一个数字
\D 匹配一个非数字的字符
\s 匹配任何空白字符
\S 匹配任何一个非空白字符
\b 匹配单词边界
\B 匹配非单词边界
^ 匹配开头
$ 匹配结尾
* 匹配连续出现0次到多次的字符
? 匹配连续出现0次到一次的字符
+ 匹配连续出现一次到多次的字符
{n} 匹配连续出现n次的字符
{n,} 匹配至少连续出现n次的字符
{n,m} 匹配至少连续出现n次,最多不超过m次的字符
var str = 'abc bcd cde';
var reg = /\bb/;
str.match(reg);//返回的是['b']而且这个b是bcd里面的那个b

exec方法

每一个正则表达式对象都有exec这个方法,它的用法如下:

var str = 'ababab';
var reg = /ab/g;
-----------------------------正则表达式是全局匹配的模式下-------------------------------------
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:2,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:4,input:'ababab']
res.exec(str)//结果是null
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
-----------------------------正则表达式不是全局匹配的模式下-----------------------------------
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
res.exec(str)//结果是一个类数组['ab',index:0,input:'ababab']
-----------------------------------------------------------------------------------------这里的index就对应着reg.lastIndex这个属性.

反向引用

反向引用需要使用到分组,分组就是使用()括起来的部分为一个整体,在进行分组匹配时的原则是:由外向内,由左向右.

var str = 'aabb';
var reg = /(\w)\1(\w)\2/g
// \1:表示的是引用第一次匹配到的()括起来的部分
// \2:表示的是引用第二次匹配到的()括起来的部分

题目:'the-first-name'转换为'theFirstName'

var str = 'the-first-name';
var reg = /-(\w)/g
str.replace(reg,($,$1)=>$1.toUpperCase)
replace方法中的回调函数的第一个参数是正则表达式匹配到的字符串片段,$1是正则表达式第第一次匹配到的()括起来的部分,依次可以有$2,$3....

正向预查

var str = 'abaaaa'
//需求是匹配后面紧跟着的字符是'b'的a
var reg = /a(?=b)/g;//查找后面紧跟的是b的a,括号后面的东西只是为了修饰前面要匹配的主体
//需求是匹配后面紧跟着的字符不是'b'的a
var reg2 = /a(?!b)/g//查找后面不是b的a

贪婪匹配和非贪婪匹配

默认情况是贪婪匹配,要改成非贪婪匹配,在量词后面加一个?

var str = 'aaaaa';
var reg = /a{1,3}/g
str,match(rge);//结果是['aaa','aa']
var reg2 = /a{1,3}?/g
str.match(reg2);//结果是['a','a','a','a','a']

一个有趣的demo

需求:给定一个数字100000000,要求将其转换为100,000,000

var str = '100000000';
var reg = /(?=(\B)(\d{3})+$)/g
str.replace(reg,',')


  转载请注明: TomoFur 正则表达式

 上一篇
图片懒加载和图片预加载 图片懒加载和图片预加载
懒加载也叫延迟加载,即延迟加载图片或者符合某种条件时才加载某些图片。牺牲了服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的响应。 预加载是提前加载图片,当用户需要查看时可以直接从本地缓存中渲染。作为服务器前端的优化,减少请
2019-05-30
下一篇 
vuex学习笔记 vuex学习笔记
是什么? vuex是专门为vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可以预测的方式发生变化。 ​
2019-05-23
  目录