正则表达式之g标志,match和 exec
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
推荐一个在线验证正则表达式的网站:
正则表达式之g标志,match和 exec的更多相关文章
- js中几个正则表达式相关函数使用时g标志的作用
首先,javascript中涉及到正则表达式的函数总共有6个,可分为两种: 1.第一种是作为字符串对象的方法,即以 String.fun(); 形式调用,这里包括 split.search.match ...
- js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。
match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...
- 正则表达式 match 和 exec 比较
match 和 exec 主要有两点不同: 1.exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示: var re=new RegExp(/\d/); re.exec( &q ...
- 正则表达式之match与exec【转的 楼兰之风】
彻底领悟javascript中的exec与match方法 阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText= ...
- js正则函数match、exec、test、search、replace、split使用介绍集合
match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...
- js正则函数match、exec、test、search、replace、split使用集合
match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...
- 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?
解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结 ...
- 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?
正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ? 表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义.我们详细叙述: 1)对于表达式对象的e ...
- 正则表达式中/g的含义
关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?” 为了解答“正则表达式(/[^0-9]/g,'')中的" ...
随机推荐
- Rebuild Instance 操作详解 - 每天5分钟玩转 OpenStack(37)
上一节我们讨论了 snapshot,snapshot 的一个重要作用是对 instance 做备份. 如果 instance 损坏了,可以通过 snapshot 恢复,这个恢复的操作就是 Rebuil ...
- TCP通信丢包原因总结
今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠 ...
- 使用Office 365抓取PM2.5数据
近日微软发布了Microsoft Flow,一个类似IFTTT自动化任务触发工具.例如,我们可以设置这样一个触发事件和对应的处理过程:当有人在微博上@我的时候,发一封邮件通知我:当我关注的博主有新文章 ...
- documentbodyscrollTop的值总为零的解决办法
有一个功能需要判断返回顶部按钮是否显示. JS代码如下: var sTop = document.body.scrollTop; if(sTop>100){ document.getElemen ...
- bzoj-4514(网络流)
题目链接: 4514: [Sdoi2016]数字配对 Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数 ...
- Vc6.0头文件的定义
Vc6.0头文件的定义 #ifndef __HEADER__ #define __HEADER__ int fun(int i); #endif
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
c# 调用C++的dll报错 Attempted to read or write protected memory: 原因是:c# 传递Null的string值导致的,将Null改为string ...
- [译]React Context
欢迎各位指导与讨论 : ) 前言 由于笔者英语和技术水平有限,有不足的地方恳请各位指出.我会及时修正的 O(∩_∩)O 当前React版本 15.0.1 时间 2016/4/25 正文 React一个 ...
- 踩坑所引发出的appendChild方法的介绍
问题描述 最近在做项目时,遇到一个问题,当js生成一个组件后,会注入到页面的某个节点里显示.在组件内部进行了一次注入操作,在调用组件的外部js文件中也进行了一次注入操作,结果发现页面里只生成了一份组件 ...
- Ubuntu 14.04.1 建立 Android M, Android N 開發環境 與 問題
# Modify /etc/apt/sources.list# add below 3 lines to /etc/apt/sources.listdeb http://archive.ubuntu. ...