JavaScript RegExp类型

正则表达式在很多编程语言中都是一个很重要的概念,JavaScript通过RegExp类型来支持正则表达式。

一、正则表达式模式

下面列举一些使用频率较高的匹配模式:

量词

量词描述
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串。
n?匹配任何包含零个或一个 n 的字符串。

大括号

大括号描述
{n}精确匹配n次
{n,}匹配n次以上
{n,m}匹配n-m次

中括号

中括号描述
[xyz]匹配这个集合中的任一一个字符(或元字符)
[^xyz]不匹配这个集合中的任何一个字符

小括号

小括号描述
(x)匹配x保存x在名为$1…$9的变量中(捕获组)

小括号用来对匹配规则分组,类似于数学中的()。

元字符

元字符描述
\d查找数字 /\d/ = /[0-9]/
\s查找空白字符

转义字符

\ 做为转意,即通常在"\“后面的字符不按原来意义解释,如/b/匹配字符"b”,当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。

二、正则表达式修饰符

通常来说,模式+修饰符构成一个完整的正则表达式。JavaScript中的修饰符有以下三种:

修饰符描述
i执行对大小写不敏感的匹配。case-insensitive
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。global
m执行多行匹配。multiline

三、创建正则表达式

在JavaScript当中,创建一个正则表达式有两种方式:使用字面量形式来创建;使用RegExp构造函数来创建。
例如:

/*
* 匹配第一个"bat"或"cat",不区分大小写
*/
var pattern1 = /[bc]at/i;
/*
* 与pattern1 相同,只不过是使用构造函数创建的
*/
var pattern2 = new RegExp("[bc]at", "i");

四、使用正则表达式

使用test()

它接受一个字符串参数。在模式与该参数匹配的情况下返回true;否则,返回false。在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。
例如:

var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(text)){
alert("The pattern was matched.");
}

使用exec()

该方法是RegExp对象的主要方法,该方法是专门为捕获组而设计的。exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
例如:

var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); // 0
alert(matches.input); // "mom and dad and baby"
alert(matches[0]); // "mom and dad and baby"
alert(matches[1]); // " and dad and baby"
alert(matches[2]); // " and baby"

五、例题(阿里巴巴2017秋招前端笔试题)

单选题
正则表达式 /a+(bab)?(caac)/ ,下列选项中是该正则表达式的子集是?
A. /(bab)(caca)/
B. /a(bab){2}(caac)
/
C. /a{2}/
D. /a+(bab){0,1}(ca)+(ca)/
E. /a(^bab)+(caac){1,}/
F. /a+(babc){2,}(acc){1,}/

解析:
A选项 babcaca不是子集
B选项 ababbab不是子集
C选项 aa是子集
D选项 acaca不是子集
E选项 正则本身有误,(^bab)匹配以"bab"开头的字符串,但前面还有a,也就是匹配以a开头的字符串,两者矛盾。
F选项 ababcbabcacc明显不是子集

所以答案选C。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值