1.g标志

   g标志一般是与match和exec来连用,否则g标志没有太大的意义,先来看一个带g标志的例子:

var str = "tankZHang (231144) tank ying (155445)";
var res = str.match(/tank/); //没有加/g
console.log(res);
//返回一个数组,数组有三个成员,一个是匹配的对象、在一个index:0(匹配到的位置)和input(原字符串)
["tank", index: 0, input: "tankZHang (231144) tank ying (155445)"]
res = str.match(/tank/g); //加了/g
// 返回一个数组,数组包含匹配了几个tank
console.log(res); //显示为tank,tank

那么我们知道g的标志是:我是一个全局标志符,我要告诉处理字符串函数是单个处理字符串还是全局处理字符串。

通过刚刚的测试可以知道:

当正则含有g标志时,全局查找,结果数组的元素0到n中包含所有匹配。

没有g标志时:数组有三个成员,一个是匹配的对象、在一个index:0(匹配到的位置)和input(原字符串)。

2.exec函数

 先来看一个例子:

 var str = "tankZHang (231144) tank ying (155445)";
var res = /tank/.exec(str); //没有加/g
console.log(res);
res = /tank/g.exec(str); //加了/g
console.log(res);
//显示结果,两者一样,和match不带有g标志三者相同
//["tank", index: 0, input: "tankZHang (231144) tank ying (155445)"]
//["tank", index: 0, input: "tankZHang (231144) tank ying (155445)"]

那么exec的作用是什么?在正则表达式,在有全局标志的情况下:

var objStr = "我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999";
var reg = /13(\d)(\d{8})/g;
console.log("reg="+ reg.lastIndex);
var arr = reg.exec(objStr);
console.log(reg.lastIndex);
console.log(arr);
//reg=0 初始lastIndex
//16 第一次匹配之后lastIndex调整为16
//["13522222222", "5", "22222222", index: 5, input: "我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999"]
//"5"和"22222222"为第一个匹配的两个分组

如果我们需要获取匹配所有的详细信息可以通过patt.exec(str)来获得例如:

var str = "Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result; while ((result = patt.exec(str)) != null) {
document.write(result);
document.write("<br />");
document.write(patt.lastIndex);
document.write("<br />");
}
// W3School
//
// W3School
//

每一个Regexp对象有个source成员:指向该正则表达式。

3.匹配前端静态文件

/\.((png|jpe?g|gif|svg)|(woff2?|eot|ttf|otf)|js|css)(\?.*)?$/;

4.正则表达式(前瞻,后瞻,非捕获性分组,惰性量词)

4.1 前瞻

符号是?=,例如:

var xx="abcde";
xx= xx.split(new RegExp('(?=a)|d'));
//“?=a”表示以a前面进行分割,new RegExp('(?=a)|d')表示以a前面的字符串或者d进行分割。
//结果是:xx[0]=abc;xx[1]=d。
//另一个例子
var regex = /(bed(?=room))/, //匹配bed的后面是room
str1="bedroom",
str2 ="roombed";
console.log(regex.test(str1)); //true;
console.log(regex.test(str2)); //false;

4.2 后瞻

符号是?!,相对于前瞻的反面

var regex = /(bed(?!room))/,
str1="bedroom",
str2 ="bedxxx";
console.log(regex.test(str1)); //false; bed的后面有room为false,其他为true。
console.log(regex.test(str2)); //true;

现在有更高级的搞法。\B+(边界)。\b+(非边界)。

var regex = /\B(room)/;
var str1="bedroom";
var str2 ="bedxxx";
console.log(str1.replace(regex,'-$1')); //bed-room
console.log(regex.test(str2)); //false; 

4.3 非捕获性分组

符号是: 括号前面加个?:

var regex = /windows (?:98|2000|2003)/;
console.log("windows 2003".match(regex)); //没有分组这个概念
//["windows 2003", index: 0, input: "windows 2003"]
var regex = /windows (98|2000|2003)/;
console.log("windows 2003".match(regex));
//["windows 2003", "2003", index: 0, input: "windows 2003"]

4.4惰性量词

贪婪量词?  * + {n} {n,} {n, m},惰性量词就是贪婪量词的后面加个‘?’,例如:

var str = "abbbaabbbaaabbb1234";
var patt1 = /.*bbb/g; //贪婪的 得到结果 ["abbbaabbbaaabbb"]
var patt2 = /.*? bbb/g; //惰性的 得到结果
//["abbb", "aabbb", "aaabbb"]

获取一级域名:

var url = require('url');
var myUrl = url.parse("http://n.51blb.com");
console.log(myUrl.hostname.replace(/^[\S^\.]*?\./,""));
//51blb.com

推荐一个在线验证正则表达式的网站:

https://regexper.com/

正则表达式之g标志,match和 exec的更多相关文章

  1. js中几个正则表达式相关函数使用时g标志的作用

    首先,javascript中涉及到正则表达式的函数总共有6个,可分为两种: 1.第一种是作为字符串对象的方法,即以 String.fun(); 形式调用,这里包括 split.search.match ...

  2. js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...

  3. 正则表达式 match 和 exec 比较

    match 和 exec 主要有两点不同: 1.exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示: var re=new RegExp(/\d/); re.exec( &q ...

  4. 正则表达式之match与exec【转的 楼兰之风】

    彻底领悟javascript中的exec与match方法 阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText= ...

  5. js正则函数match、exec、test、search、replace、split使用介绍集合

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...

  6. js正则函数match、exec、test、search、replace、split使用集合

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...

  7. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?

    解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结 ...

  8. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?

    正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?     表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义.我们详细叙述: 1)对于表达式对象的e ...

  9. 正则表达式中/g的含义

    关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”   为了解答“正则表达式(/[^0-9]/g,'')中的" ...

随机推荐

  1. 几款比较好用的C语言的集成开发环境及在windows下用命令行编译C代码

    最近要用到C,所以尝试了这几款windows平台下比较好的IDE. VS2015:比较复杂和庞大,据说从2013版本开始支持C99标准. C-free:轻巧,但是不支持C99. vc++6.0:很多学 ...

  2. shell数值运算与运算符

  3. 利用httpd对tomcat进行负载均衡配置

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:jdk-8u60-linux-x64 ...

  4. 3、DNS服务器功能(正向、反向解析)

    实验目的: 建立gr.org域的主名称服务器.解析: 名称 IP 用途 ns.gr.org        192.168.170.3          名称服务器 www.gr.org     192 ...

  5. Apache2.4部署django出现403 Forbidden错误解决办法

    前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...

  6. DNS查找域名的过程

    当我们在浏览器输入一个url地址时,需要获取到这个url的域名,本篇文章主要介绍了关于DNS查找解析域名的过程的一些东西. 关于DNS 不清楚DNS的小伙伴可以点这里:关于域名系统DNS解析IP地址的 ...

  7. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  8. TortoiseSVN 中 一个 Merge revisions to.. 小坑

    注意: 不能只选头与尾svn号, 一定要全选 !!全选 !!全选 !!

  9. Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...

    仰天长啸   Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds... 当启动tomcat时候出现 ...

  10. jQuery动画效果animate和scrollTop结合使用实例

    CSS属性值是逐渐改变的,这样就可以创建动画效果.只有数字值可创建动画(比如 "margin:30px").字符串值无法创建动画(比如 "background-color ...