前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式之量词(重复出现)?、*、+

正则表达式之量词(重复出现)?、*、+

作者头像
郑小超.
发布2018-01-24 15:40:15
1.3K0
发布2018-01-24 15:40:15
举报
文章被收录于专栏:GreenLeavesGreenLeaves

1、?     符     匹配其之前紧邻的元素,不管该元素是否出现,都匹配成功!(注意该元素只能出现一次或者不出现都匹配成功)

现在来匹配color和colour,这两个单词都可以表示颜色的意思,他们的区别在于前面的单词比后面的单词多出一个u,那怎么通过一个正则匹配出这两个单词呢?代码如下:

代码语言:javascript
复制
var str="color";
alert(str.match(/colou?r/)); //输出:color
str="colour";
alert(str.match(/colou?r/)); //输出:colour

"?"元字符和之前介绍的元字符都不同,他只作用于之前紧邻他的元字符,因此来解读上面的正则colou?r的意思是:先是c,然后是o,然后是l,然后是o,然后是u?,紧接着是r;

u?是必然匹配成功的,有时他会匹配一个u,有时则不匹配任何字符,关键在于,无论u是否出现,匹配都是成功的;

下面来看一个例题:需要匹配7月6日的文本(July Sixth)的文本,其中月份可能写作Jul或者July,日期可能写成Sixth、6th、6。下面上代码:

第一种方法:

代码语言:javascript
复制
var str="July 6th";
alert(str.match(/^(July|Jul).(sixth|6th|6)/)); //输出:July 6th

第二种方法:

代码语言:javascript
复制
var str="July 6th";
alert(str.match(/^July?.(sixth|6(th)?)/)); //输出:July 6th

显然第二种方法更加的简洁!而且第二种方法?和()括号的结合,使得可以匹配的范围无限增大了,因为括号里面的表达式可以任意复杂。

2  *  符           匹配之前紧邻的元素,不管该元素是否出现,都匹配成功!(紧邻的元素可以出现任意多次,或者不出现)

与上面的?号相似*号也是作用于其之前紧邻的元素,而且两者都是不管前面紧邻的元素是否出现都匹配成功!

但是两者的不同点是:?匹配前面的元素,只出现一次或者不出现而*号匹配的前面的元素是出现多次或者不出现;

有如下代码:

代码语言:javascript
复制
var doc="<h1  ></h1>";//h1标签内有两个空格
alert(doc.match(/<[Hh][1-6]\s*>/)); //输出<h1  >  \s代表空格

上面这段代码的意思是允许h1与>之间存在任意多个空格,如果空格不出现,也不影响匹配的结果!

3  +  符          匹配之前紧邻的元素,但是该元素必须出现一次或多次,否则匹配失败!

与上面的*号类似,+号也是作用于其之前紧邻的元素,但是与*号不同的是+号之前的元素必须出现一次,或则匹配失败(两者都包括匹配多次的情况)

接下来看<hr size="   66    "> 这样的html tag,在最后的尖括号之前可以出现任意多个空格,此外在等号两边也可以出现任意多个空格,

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档