JavaScript正则表达式基础

正则表达式在匹配字符串上十分实用,这里就简单写出在JavaScript中的正则表达式实用基础。

首先介绍一下JavaScript中测试正则表达式是否匹配的方法test,该方法传入要匹配的字符串,如果匹配成功返回true,失败返回false。下面都会用这个方法来测试正则表达式的匹配。

/a/.test('a');
// true

正则表达式的创建


可以实用字面量直接创建,也可以用构造函数创建。

使用字面量,将正则表达式内容写在两个/之间,而使用构造函数时,将正则表达式内容作为参数传入

var r=/a/; // 用字面量创建

var r=new RegExp('a'); // 用构造函数创建

接下来介绍正则表达式内的字符含义

元字符


\t 水平制表符(tab)

\v 垂直制表符

\n 换行符

\r 回车符

\0 空字符

\f 换页符

与类有关的字符


[] 将里面的内容归为一类,匹配到其中任一个即为匹配成功

/[abc]/.test('a');
// true
/[abc]/.test('b');
// true
/[abc]/.test('c');
// true
/[abc]/.test('d');
// false

^ 构建反向类,匹配到其中任一个为匹配失败

/[^abc]/.test('a');
// false
/[^abc]/.test('b');
// false
/[^abc]/.test('c');
// false
/[^abc]/.test('d');
// true

- 构建范围类,即匹配连续的字符(数字上的连续和字母上的连续),可以连写

/[1-9]/.test('1');
// true
/[1-9]/.test('12');
// true
/[1-9]/.test('120');
// true
/[a-z]/.test('ab');
// true
/[a-z]/.test('abc');
// true
/[A-Z]/.test('AB');
// true
/[A-Z]/.test('ABC');
// true
/[1-9a-z]/.test('1aa1');
// true  连写

预定义字符


下面的字符都是可以使用上面的字符来实现的,但是使用预定义字符更为方便

\d 数字字符

\D 非数字字符

\s 空白符

\S 非空白符

\w 单词字符(字母和数字下划线)

\W 非单词字符

边界匹配字符


^ 以。。。开始

/^a/.test('1a')
// false
/^a/.test('a1')
// true

$ 以。。。结束

/a$/.test('1a')
// true
/a$/.test('a1')
// false

\b 单词边界

'there is an apple'.replace(/\b/g,'x');
// "xtherex xisx xanx xapplex"

// g是修饰符,在下文会提及,这里使用字符串的方法将单词边界替换为x

\B 非单词边界

'there is an apple'.replace(/\B/g,'x');
// "txhxexrxe ixs axn axpxpxlxe"

量词


通过https://regexper.com/#%5Cn%0A这个网站来可视化看出次数

? 最多出现1次

\d?

上图的含义为,可以不经digit(数字)走过这条路,即数字出现0次的匹配,也可以经过一次

+ 最少出现1次

\d+

上图的含义为经过一次或无限次循环经过,即匹配一个或者匹配无数个重复的

* 出现任意次

\d*

{n} 出现n次

\d{2}

上图含义为经过一次后还能再经过一次,即为两次

{n,m} 出现n到m次

\d{2,5}

{n,} 至少出现n次

\d{2,}

贪婪模式


正则表达式在可以匹配多个也可以匹配少个的情况下,会默认尽可能地匹配多个

'123456789'.replace(/\d{3,6}/g,'x')
// "xx"

上面代码中,既可以匹配三次,也可以匹配两次,最后匹配了两次(尽可能地匹配多个就导致了匹配次数的下降)

非贪婪模式


要尽可能匹配少个的话,只需要在两次后面加上?即可

'123456789'.replace(/\d{3,6}?/g,'x')
// "xxx"

分组


() 可用于实现分组

(123){5}

| 用于实现或,即选取分组内的任一个

'abdacd'.replace(/a(b|c)d/g,'x')
// "xx"

$ 用于反向引用,引用分组的内容

'2019-02-22'.replace(/(\d{4})-(\d{2})-(\d{2})/,'$2/$3/$1')
// "02/22/2019"

修饰符


g 全文搜索,添加后会一直匹配

'aa'.replace(/a/,'x');
// "xa"
'aa'.replace(/a/g,'x');
// "xx"

i 忽略大小写,默认大小写敏感,添加忽略大小写

'A'.replace(/a/,'x');
// "A"
'A'.replace(/a/i,'x');
// "x"

m 多行搜索

当有多行时,添加能匹配多行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值