详解JavaScript正则表达式(三)

原创 2017年05月05日 22:41:06

本文是JavaScript正则表达式的第三篇文章,若是对正则表达式陌生的话,可以看我之前的两篇文章。
详解正则表达式(一)
详解正则表达式(二)

贪婪模式和非贪婪模式

1、贪婪模式

在匹配成功的情况下,尽可能多的匹配。而JavaScript默认的就是贪婪模式。话不多说,直接上例子。

var str = "12345";
var reg = /\d{2,4}/;
var res = str.replace(reg,"X");
console.log(res);

输出结果是:X5。
分析:首先reg正则式表达的意思是匹配2至4个数字,但是看输出的结果可以发现,匹配的是4个数字,这就是贪婪模式匹配。

2、非贪婪模式

就是让正则表达式尽可能少的匹配,但是前提是匹配成功。
做法是在量词的后面加上?即可。(注意这里是英文输入法下面的?号)

var str = "12345";
var reg = /\d{2,4}?/;
var res = str.replace(reg,"X");
console.log(res);

输出结果是:X345
分析:注意看reg正则式的量词后面有一个?,表示是非贪婪匹配。

分组

比如,如果你想匹配三个”name”这个字符串,这里就要使用到分组以及量词的概念。

先看一下直接使用name{3},效果如下图:
这里写图片描述
可以看到是“e”重复了三次。要想让整个name重复三次,需要这样书写(name){3}。
这里写图片描述

捕获组

捕获组就是把正则表达式中字表达式匹配的内容,保存到内存中以数字编号或显示命名的组里,方便后面使用。可以在正则表达式内部使用,也可以在外部使用。
捕获组又分两种,一种是捕获分组,一种是不捕获分组。

1、捕获分组
var str = "hello world";
var reg = /(world)/g;
console.log(reg.test(str));//true
console.log(RegExp.$1);//world

在reg中通过将world用 “()“括起来构成分组,此时执行test方法之后,匹配成功,同时也可看作将分组的内容也就是world存储起来了,之后通过RegExp.$1来引用。

2、不捕获分组

有时候需要使用分组,但不需要捕获分组,这个时候只需在分组内加上”?:”,比如下面:

(?:\d{2})-(\d{2})-(\d{4})

这里写图片描述
放在代码中观察

var str = "23-45-5678";
var reg = /(?:\d{2})-(\d{2})-(\d{4})/g;
console.log(reg.test(str));//true
console.log(RegExp.$1);//45

可以发现RegExp.$1的输出结果是45,而不是23,说明第一个分组被忽略了,没有捕获。

反向引用

举个例子,比如给你一个时间是2017-5-5,想获得这样一个格式,5/5/2017。这要怎么来完成?这就要使用分组的概念。

var dateStr = "2017-05-12";
var reg = /(\d{4})-(\d{2})-(\d{2})/g;
dateStr.replace(reg,"$2/$3/$1");

输出结果:

“05/12/2017”

上述例子中先是正则和要比较的字符串完全匹配,然后通过分组,可以通过$来引用分组中的

版权声明:本文为博主原创文章,未经博主允许不得转载。

javascript常用正则表达式和解析

一、正则表达式(regular expression简称res) 1、定义: 一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。...
  • u012572955
  • u012572955
  • 2015年07月20日 09:16
  • 2210

JavaScript的中文正则及常用正则表达式

  • QQ635785620
  • QQ635785620
  • 2013年09月06日 11:03
  • 5307

读懂简单的正则表达式

读懂简单的正则表达式 最近学习过程中,遇到了一段用正则表达式验证email输入的代码 if(!/^\w+@\w+.\w+$/.test(value)){}//ps:这里的正则表达式有问题,后面已修正...
  • qq_35244529
  • qq_35244529
  • 2016年11月16日 22:33
  • 162

跟我学《JavaScript高程3》,开讲啦……

他们都推荐讲一讲《JavaScript高级程序设计第三版》,这本书特别厚,群里的同学也提了很多次,自学很难坚持看完。所以,接下来将按照这本书的目录结构,依次录制一整套视频教程,用最贴近初学者的方式,与...
  • guxing820
  • guxing820
  • 2016年05月25日 01:44
  • 1175

Java学习系列(二十四)Java正则表达式详解

正则表达式可以说是用来处理字符串的一把利器,它是一个专门匹配n个字符串的字符串模板,本质是查找和替换。在实例演示之前先了解一下Pattern、Matcher这两个工具类,Pattern:编译好的带匹配...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2015年05月05日 17:22
  • 6366

关于正则表达式的总结

Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对...
  • u011225629
  • u011225629
  • 2015年05月07日 16:34
  • 2631

JavaWeb——JavaScript常用正则表达式

JavaScript常用正则表达式
  • RamProg
  • RamProg
  • 2015年09月11日 23:34
  • 200

JavaScript正则表达式----RegExp类型, 代码说明简单易懂

RegExp正则表达式定义RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。匹配原则: 贪婪匹配 直接量语法 代码说明, 例题讲解, 持续更新, 新手指导, 白话理解正则表达式...
  • c_kite
  • c_kite
  • 2017年01月01日 00:15
  • 511

Javascript常用正则表达式以及JS常见正则表达式笔试题

JS正则表达式,在表单验证等方面都有应用,下面结合学习经过,整理一些初学 者所需要掌握的一些基本JS正则规则: 1.正则表达式基础语法练习 (1)校验邮政编码(由六位组成) 这...
  • liwusen
  • liwusen
  • 2016年02月21日 13:56
  • 2781

javascript 正则表达式使用说明详细教程

1,正则表达式的作用:匹配一个字符串中的一些内容 2,声明和使用: 1)构造函数 var reg=new RegExp(/表达式/) 2)字面量 var reg=/表达式/   推荐使用 eg...
  • fish86
  • fish86
  • 2017年01月09日 20:39
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详解JavaScript正则表达式(三)
举报原因:
原因补充:

(最多只允许输入30个字)