前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式-2.重复匹配

正则表达式-2.重复匹配

作者头像
悠扬前奏
发布2019-05-28 12:38:35
1.3K0
发布2019-05-28 12:38:35
举报
文章被收录于专栏:悠扬前奏的博客

1. 匹配次数

1.1 匹配一个或多个字符

+匹配一个或多个字符,例如:

  • a+匹配一个或者多个a
  • [a-z]+匹配一个或者多个小写字母
  • [0-9]+匹配一个或者多个数字
代码语言:javascript
复制
// 邮件地址检测
/[\w\.]+@\w+\.\w+/.test("asd.qwe@qq.com");//true

注意:

  • 字符集合中的元字符加不加\都被解释为普通字符,但是建议加上
  • [0-9+]匹配一个数字或者加号。

1.2 匹配零个或者多个字符

*匹配零个或者多个字符。

代码语言:javascript
复制
/[\w\.]*@\w+\.\w+/.test("@qq.com");//true

1.3 匹配零个或者一个字符

?匹配零个或者一个字符。

代码语言:javascript
复制
// 匹配http(s)请求地址
/https?:\/\/[\w.]+/.test("http://baidu.com"); // true
/https?:\/\/[\w.]+/.test("https://baidu.com"); // true

1.4 匹配的重复次数

大括号({})用来设定重复的次数。

  • 匹配精确的值: {3},匹配到3次。
  • 匹配范围区间: {1,3},至少匹配到1次,最多3次。
  • 至少匹配次数: {3,},至少匹配到3次。
  • 至多匹配次数: {,3}最多匹配了3次。

2. 过度匹配

在不知道匹配次数的上限的情况下,容易出现过度匹配的问题:

代码语言:javascript
复制
// 想匹配b标签中的内容
"head <B>this is in a B tag</B> mid <B>this is in another B tag</B> end."
.match(/<[Bb]>.*<\/[Bb]>/g);
// 匹配结果是<B>this is in a B tag</B> mid <B>this is in another B tag</B>

在上面例子中,第一个<B>和最后一个</B>中间的内容被/.*/全部匹配出来了。这就是“贪婪型”的元字符。 要想分别匹配两个B标签中中间的内容,需要使用“懒惰型”版本:*?

代码语言:javascript
复制
"head <B>this is in a B tag</B> mid <B>this is in another B tag</B> end."
.match(/<[Bb]>.*?<\/[Bb]>/g);
// 匹配结果是["<B>this is in a B tag</B>", "<B>this is in another B tag</B>"]

贪婪型元字符

懒惰型元字符

*

*?

+

+?

{n,}

{n,}?

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 匹配次数
    • 1.1 匹配一个或多个字符
      • 1.2 匹配零个或者多个字符
        • 1.3 匹配零个或者一个字符
          • 1.4 匹配的重复次数
          • 2. 过度匹配
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档