正则表达式基础及其用法、断言等详细介绍

正则表达式

1、正则表达式基础

创建正则表达式

var reg = new RegExp('正则内容',修饰符)//构造函数创建
var reg = /正则内容/ //字面量创建

正则修饰符 i,g,m;

i 表示为不区分大小写

g 表示为全局匹配

m 多行匹配

正则对象的方法:

test() 判断参数中的字符串有没有匹配正则表达式的内容,返回值为一个布尔值。

var reg = /a/i;
var bool = reg.test('bkAdc');
console.log(bool)

exec() 返回一个数组,表示exec()参数中字符串匹配的正则内容,不会全局匹配;

var reg = /a/i;
var arr = reg.exec('bkAdc');
console.log(arr)

字符串方法:

search() 只能找到第一个,不能全局匹配,返回找到内容的下标。

var str = 'sAkjfvsa';
var index = str.search(/a/i);
console.log(index)

match() 把找到匹配的元素用数组罗列,如果没有全局匹配和exec相同。

var str = 'sAkjfvsa';
var arr = str.match(/a/ig);
console.log(arr)

replace() 把找到的匹配到的元素替换。当使用全局匹配时,可以完成所有元素的匹配替换

var str = 'sAkjfvsa';
str = str.replace(/a/ig,'z');
console.log(str)

split() 可以将匹配到的元素进行切割,返回一个数组。

var str = 'sAkjfvsa';
var arr = str.split(/a/ig,'z');
console.log(arr)

2、元字符

. 匹配任何一个字符,是一个通配符

\.把通配符.转为字符。

var str = 'catcbtctbcabtc/t';
console.log(str.match(/c.t/g))
[]表示匹配其中任意一个

[a-z]表示匹配a-z其中

在[]中的,就是转义符,不是通配符。

但在[]中所有的括号必须增加转义。

两个\在字符或者正则表达式的[]都是一个\

var str = 'catcbtctbcabtc/t';
console.log(str.match(/c[abcdefg]t/g));
console.log(str.match(/c[a-g]t/g))
console.log('aa\\a\a'.match(/[\\]/g));

[aaazzzzdddd] 无意义

[a-Z]错误的Unicode编码中a比Z大

[A-z]错误大写Z到a中间还有其他字符串

在[]内第一个字符是^,表示后面的字符取反

console.log('abcdef'.match(/[^d]/g))

[a-zA-Z0-9]表示所有数字和字母;

\w 表示所有数字字母下划线

\W对\w取反

\d表示所有数字

\D表示对\d取反

\s表示所有空格

\S表示对\s取反

/[\u4e00-\u9fa5]/ 匹配中文字符

3、重复次数

{n}表示重复n次

console.log('aaaaaaaaa'.match(/a{6}/g))

{n,m}表示最少重复n次最多重复m次,他会先匹配最大的字符

console.log('aaaaaaaaaaaaa'.match(/a{2,4}/g))

{n,}表示至少n次

console.log('aaaaaaaa'.match(/a{1,}/g))

{0,}表示可以没有也可以若干个,会打印空白

console.log('aaaaaaaa'.match(/a{0,}/g))

/a*/g 就相当于 /a{0,}/g

/a+/g 就相当于/a{1,}/g

/a?/g 就相当于 /a{0,1}/g

贪婪模式与非贪婪模式

贪婪模式

它会先匹配最大的字符,然后再考虑少的字符。

console.log('aaaaaaaaaaaaa'.match(/a{2,4}/g))

非贪婪模式,它会优先去匹配少的字符。

一般就给可以匹配多个字符后面加?字符。

 var str = "<p>Uber的这款无人车原型配备了多个<strong>摄像头</strong>、<em>激光雷达</em>以及<span>传感器</span>,可看清100米范围内任何方向的东西</p><br/><p>第二行内容,哎嘿,第二行内容</p>";
 str = str.match(/<.*?>/g);
相同重复 /1
var str="aaabbffddeeaaggfddssaaggeer".split("").sort().join("").match(/(\w)\1*/g)

/(\w)\1是指匹配字符重复的次数

4、选择和起始结束

要完成一个全体内容就需要使用起始和结束符来操作

^起始符,表示开始从这个开始匹配

$结束符,表示必须以某个字符结尾

console.log('bbaacc'.match(/^a+/g));//要求其实必须是一个或多个a以上
console.log('bbaacc'.match(/c+$/g))//要求必须是一个c或多个c结尾

5、群组

用()括起来的内容

当使用match时,如果使用群组,加上g和不加g是有差距的。

不加g可以将每个群组列表在数组的下标1开始的元素;加g就不能找到群组的内容

在replace中如果不使用群组,后面的函数中参数第一位是符合正则的内容,第二位就是这个字符的下标。

在replace中如果使用群组,后面的函数中参数分别是符合正则的内容,和每个群组的内容。

var str="10[a]3[bc]".replace(/(\d+)\[([a-zA-Z]+)\]/g,function(item1,item2,item3){
           return item3.repeat(item2);
        });

6、断言

前瞻断言(先行断言),紧随其后

console.log('abac'.match(/a(?=b)/g))

查找紧随其后的内容是某个字符的条件

console.log('abac'.match(/a(?!c)/g))

查找紧随其后的内容不是某个字符的条件

后瞻断言(后行断言),紧随其前

console.log('abcb'.match(/(?<=a)b/g))

前面必须是某个条件,紧随其后的字符

console.log('abcb'.match(/(?<!a)b/g))

前面必须不是某个条件,紧随其后的字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值