javaScript正则表达式


一、创建正则对象

1. 使用RegExp构造函数 new RegExp()

  • 参数情况一:new RegExp(‘word’,‘ig’);
  • 参数情况二:new RegExp(/word/ig);

代码示例:

const reg = new RegExp(/word/ig);
const reg1 = new RegExp('word','ig');
//相当于const reg = /word/ig;

2. 直接声明变量

代码示例:

//写法:/匹配要求/修饰符
const reg = /word/ig;

二、修饰符

1.u 修饰符

匹配大于\uFFFF的Unicode字符,可以正确处理4个字符的UTF-16编码

  • 使用大括号{ }表示Unicode字符时要使用u修饰符才能正确匹配
  • 在量词中匹配正确的字符
  • ( . ) 匹配除换行符以外的Unicode字符,使用u修饰符就可以匹配大于\uFFF的Unicode字符,比如中文字符
    在更新的标准中除使用{}表示Unicode字符外不使用u修饰符也能正确匹配字符

代码示例:


console.log(/\u597D/u.test('\u597D'));//true
console.log(/\u597D/.test('\u597D'));//true
console.log(/\u597D/u.test('好'));//true
console.log(/\u597D/.test('好'));//true

//es6新增使用{}表示Unicode字符表示法
console.log(/\u{597D}/u.test('好'));//true
console.log(/\u{597D}/.test('好'));//false
//量词中匹配正确的字符
console.log(/好{2}/u.test('好好'));//true
console.log(/好{2}/.test('好好'));//true

2.g 修饰符 全局匹配

3.y 修饰符

也是全局匹配,但是跟g修饰符的区别在于:y修饰符隐含了头部匹配的标志(^),让(^)在全局匹配中都有效

代码示例:

const strY = 'besbdebls';
let rY = /b/y;
let rG = /b/g;
console.log(rY.exec(strY));//b index:0
//因为上一个匹配位置是0,所以下一个位置是1,为e,不符合匹配返回null
console.log(rY.exec(strY));//null
//exec()返回null后重新从0开始
console.log(rY.exec(strY));//b index:0

const strY2 = 'bbesbbdebls';
console.log(rY.exec(strY2));//b index:0
console.log(rY.exec(strY2));//b index:1
console.log(rY.exec(strY2));//null
console.log(rY.exec(strY2));//b index:0
console.log(rY.exec(strY2));//b index:1
console.log(rY.exec(strY2));//null

//g修饰符跳过不符合,返回符合匹配,直到没有字符匹配返回null再重新从0开始匹配
console.log(rG.exec(strY));//b index:2
console.log(rG.exec(strY));//b index:5
console.log(rG.exec(strY));//b index:6
console.log(rG.exec(strY));//null
console.log(rG.exec(strY));//b index:0
console.log(rG.exec(strY));//b index:3

4.s 修饰符

(.) 点匹配除行终止符的任意单个字符,使用s修饰符后点 (.) 就可以匹配包括行终止符的任意单个字符,即点(dot)为所有字符,dotAll模式 (提示: 行终止符指换行符U+000A或\n、回车符U+000D或\r、行分隔符U+2028、段分隔符U+2029)
代码示例:

console.log('macth\n222\r'.match(/./gs));// ['m', 'a', 'c', 't', 'h', '\n', '2', '2', '2', '\r']
console.log('macth\n333\r'.match(/./g));// ['m', 'a', 'c', 't', 'h', '3', '3', '3']

5.i 修饰符

不分大小写字母匹配字符
代码示例:

const reg4 = /word/i;
reg4.test('WorD');//true
reg4.test('word');//true

三、正则对象属性

  • flags: 返回String值,表示正则对象使用的修饰符
  • dotAll: 返回Boolean值,表示正则对象是否使用了s修饰符
  • sticky: 返回Boolean值,表示正则对象是否使用了y修饰符
  • exec(): 在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null

代码示例:

//exec()必须使用g修饰符或y修饰符才能从上一个匹配的位置开始匹配,要不然一直返回第一匹配字符
 const test = 'abcd';
 let testReg = /\w/g;
 console.log(testReg.exec(test));//a
 console.log(testReg.exec(test));//b
 console.log(testReg.exec(test));//c
 console.log(testReg.exec(test));//d
 console.log(testReg.exec(test));//null
 //返回null后就从0重新开始
 console.log(testReg.exec(test));//a
  //使用regObj.lastIndex改变下一个匹配开始的位置
 testReg.lastIndex = 2;//从2开始,也就是c开始
 console.log(testReg.exec(test));//c

四、先行断言与后行断言

  • 先行断言
    • 先行断言:/x(?=y)/ x只有在y前面才匹配
    • 先行否定断言:/x(?!y)/ x只有不在y前面才匹配

代码示例:

//只有在@前面的 字符 才匹配
console.log('jack@qq.com lin@qq.com'.match(/\w+(?=@)/g);//['jack','lin']
  • 后行断言
    • 后行断言:/(?<=y)x/ x只有在y后面才匹配V8引擎的4.9版本支持
    • 后行否定断言:/(?<!y)x/ x不在y后面才匹配

代码示例:

//匹配不在元后面的 数字
console.log('水蜜桃10元三斤便宜卖啦!'.match(/(?<!元)\d+/ug));//['10']

五、正则中的特殊字符

  • \d :数字
  • \D:不是数字,空格、行终止符、大于\uFFFF的Unicode字符(中文)
  • \w:字母
  • \W:不是字母,空格、行终止符、大于\uFFFF的Unicode字符(中文)
  • \s:空格
  • \S:除空格外的字符,空格、大于\uFFFF的Unicode字符、特殊字符%¥&
  • (.) 点:匹配除换行符之外的任意字符
  • \ :匹配 \
  • ^ :行的开头
  • & :行的结尾

六、表示次数

正确的使用 量词?* + 表示不确定数量的字符

  1. ? :零次或一次
  2. *:零次或多次
  3. +:一次或多次
  4. 使用量词{num}表示出现的次数

代码示例:

//在匹配字符后使用表示字符重复的次数
/a?/;//零个a或一个a

/a*/;//零个a或多个a

/a+/;//一个a或多个a

//使用量词表示上限和下限
//匹配两个a到四个a
const str = '_aa_aaaaaa_aaa';
console.log(str.match(/a{2,4}/g));//['aa','aaaa','aa','aaa']
//匹配四个a
console.log(str.match(/a{4}/g));//['aaaa']

七、应用正则对象

regObj.test(strObj)

测试str字符串是否满足要求,返回Boolean值

strObj.match(regObj)

返回字符串中符合匹配的数组结果

strObj.replace(regObj,str)

搜索并替换,将字符串中符合匹配的字符串转换为指定字符 str


未完待续......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值