allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

正则表达式中test、exec、match的区别介绍及括号的用法

来源:脚本之家  责任编辑:小易  时间:2017/9/19 16:55:37


正则表达式中test、exec、match的区别介绍及括号的用法

让孩子能快速的学会说话,可以注意以下方面:1、父母多与宝宝交流,让宝宝从大人不断重复的名词中明白对应的物品,我们千万不要低估孩子的接受能力,他(她)只是不会说,但小家伙心里什么都明白,孩子的成长速度总是出乎父母的预期。比如,你以为还是个小宝宝,但实际上我们平时互相交流的冰箱、电灯、门等这些家里经常提及的名字,宝宝们都明白指的是什么。2、尽量用一种语言交流,比如家里有某种方言混着普通话交流的,这种尽量和宝宝沟通时,用普通话,不要混淆宝宝语言名词和实际物品对应的关系。3、不要说叠词,比如:吃饭饭、穿衣衣,这些都没有必要,跟宝宝说话就用平常的用语,有助于宝宝大脑的成长,同时也从小养成把孩子当个人,而所谓树挪死人挪活,不少伟大球星也有过改变位置而获得新生的,除了耶罗这种打前锋是大神,打后卫是铁闸的BT,还是有很多球星的,我稍微举一下例子。生姜头斯科尔斯92班代表人物斯科尔斯刚开始出道的时候是打影锋的,处子赛季出场17次,但是在充满身体对抗的英超中,斯科尔斯单薄的身体几乎无法和英超后卫抗衡。在曼联随后前锋位置饱和,中场球员奇缺的情况下,爵爷将生姜头后撤,变为中前卫,从此传球精准,视野开阔的斯科尔斯靠着超高的球商在几乎没有适应期的情况下就成为了顶级的中场球员。有人这么评价他:当他存在的时候,你不会感觉到他的存在,当他离开的时候你才会真切地感受到他的离开,这就是斯科尔斯。施魏因斯泰格当施魏因斯泰

test、exec、match的简单区别

先不说蛋清敷脸有什么好处,先来说说有什么坏处吧。生的鸡蛋比较容易有沙门氏菌感染的可能,因为这种细菌在禽类身上比较常见,在生蛋的过程中,鸡蛋中也会存在这类细菌。如果烹调合理的话,细菌很容易被杀死,但是对。防恶意抓取,请查看原文,,真格学网提供内容。

1、test

有!小时候真的是不知天高地厚啊。有一次我在姑姑家和表哥表姐一起玩,当时是在阳台上三楼,还没有防护栏。当时阳台只有挂衣服的一条电线杆,这时我居然想起了翻跟斗,从电线杆翻了过去,我还兴奋地着笑说成功翻过去。防恶意抓取,请查看原文,,真格学网提供内容。

test 返回 Boolean,查找对应的字符串中是否存在模式。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true

不止是现在,在以前各个时期,都有很多爱慕虚荣的人。每个人或多或少都有虚荣心,相比来说女性的虚荣心要比男性更强。怎么理解“爱慕虚荣”呢?最简单的理解就是:脱离实际的一种物质追求(狭义上)。即:在经济条件不允许下、没有必要的情况下,一定要买车、买房、买高档手机、星级饭店、饭店消费,给别人营造一种自己很有钱的虚假状态。(例外的情况:在生意场中,很多刚创业的人会这样伪装自己,来获得别人的投资。)很多人营造。防恶意抓取,请查看原文,,真格学网提供内容。

2、exec

狗的嗅觉器官很灵敏,其嗅粘膜面积是人类的4倍,粘膜内嗅细胞大约两亿多个,为人类的40倍。狗对气味的敏感程度高,辨别能力强。即使是未通过训练的普通家养狗在一般的情况下也能嗅到百米地方散发出的轻微臭气。人。防恶意抓取,请查看原文,,真格学网提供内容。

exec 查找并返回当前的匹配结果,并以数组的形式返回。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str); 如果不存在模式,则 arr 为 null,否则 arr 总是一个长度为 1 的数组,其值就是当前匹配项。arr 还有三个属性:index 当前匹配项的位置;lastIndex 当前匹配项结束的位置(index + 当前匹配项的长度);input 如上示例中 input 就是 str。

  大家可能都有这样的疑惑,为什么我们在网上经常看到淘宝开店赚多少W的新闻,而我的淘宝店铺却不赚钱?那网上那些淘宝开店赚多少W的新闻是真的吗?看完下面的分析,真相震惊!  比如新闻爆料“家门口开淘宝店XX一农民月净赚万元”,小编仔细阅读了整篇文章内容,得出这一一个结论,就是通过淘宝服务站帮助农民朋友该购,然后赚钱赚取服务费。又比如“XX80后小伙600元淘宝创业7年后年售额过亿”主要讲的是80后小伙靠着600元,在淘宝开起了网店。7年的时间,在不断学习摸索下,他从一个人、一台电脑做到目前拥有三家公司,年销售过亿元,上演了一出屌丝变身高富帅的创业奇迹。像这样的新闻,可以说在网上可以找到很多……每。防恶意抓取,请查看原文,,真格学网提供内容。

exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]); 上述两个输出都是 1a。现在再看看指定参数 g: var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]); 上述第一个输出 1a,第二个输出 1b。

很多洛阳的朋友都已经在市区买了房,大都已经长期定居在此,但他们中的大多数人还是会选择,把老家的房子重新修整一遍,这是为什么呢?在老家建房子是归根!“老家的房子就是一个根,不管在哪里混,根总是要留住的,以前的房子快垮了,就索性建一个新的”。农村的房子其实在很多人心中都享有着无可比拟的地位,再仔细想想,也的确如此。首先,对于很多人来说,老家的房子是自己永远的归宿。无论在哪里谋生,只要老家的房子还在,那就还有一条退路,还有一个寄托。落叶归根的思想大家都有。如果老家的房子都没有了,那就像无根浮萍,灵魂永远没有寄托。现在的很多农村基本都是留守妇女,儿童,老人,要么都出去打工,房子基本空着!整个村子除了过。防恶意抓取,请查看原文,,真格学网提供内容。

3、match

诚邀,因为对游戏比较了解,所以对游戏手机配置也有一定的研究。下面就由我来简单来说一下y67的优缺点吧优点:1.握着手感还行2.运行速度也不是很快,但也不是慢到渣3.外观设计不错4.音响可以5.信号好(。防恶意抓取,请查看原文,,真格学网提供内容。

match 是 String 对象的一个方法。 var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg)); match 这个方法有点像 exec,但:exec 是 RegExp 对象的方法;math 是 String 对象的方法。二者还有一个不同点,就是对参数 g 的解释。 如果指定了参数 g,那么 match 一次返回所有的结果。 var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(str.match(reg)); //alert(str.match(reg)); // 此句同上句的结果是一样的 此结果为一个数组,有三个元素,分别是:1a、1b、1c。

谢邀,房间有异味,多数情况下是甲醛或者其他气体所致。要想去除异味,可以选择适当的植物种植。下面优植园艺为大家介绍几种适合室内去除异味的植物。1.吊兰。2.绿萝。3.芦荟。4.蟹爪兰。5.文竹。希望以上解答对您有所帮助,欢迎关注我们,了解更多花卉园艺养护知识。。防恶意抓取,请查看原文,,真格学网提供内容。

正则表达式对象有两个定义方式::

论耐用和手机质量,个人感觉国产手机中还是华为、荣耀的手机最好。如今,提到华为手机,人们常常想到的是质量过硬,这也并非空穴来风,华为和荣耀对手机质量的苛刻确实可以从产品中体现出来,像最近的荣耀畅玩5X在。防恶意抓取,请查看原文,,真格学网提供内容。

1、第一种定义(构造函数定义):

黑牙/黄牙经过洗牙,确实可以变白,但是代价是牙刷的钙质保护层受损,会加剧牙齿的损伤变黑,从健康角度来说,洗牙后的牙好看,但还不如黑黄牙健康。要想让牙齿变白,首先要做到的就是早晚刷牙,一天刷两次牙。还有。防恶意抓取,请查看原文,,真格学网提供内容。

new RegExp(pattern, attributes);如var reg = new RegExp("abc","g")

其中pattern为表示表达式内容,如上表示匹配abc

1980年至2017年,弹指间发生了什么?——三十七年的集体回忆珍藏。37年,意味着什么?37年的集体回忆错过了什么,又发生了哪些变化呢?一起来回忆这36年来的变化,一起来怀旧,珍惜现在的美好时光,也。防恶意抓取,请查看原文,,真格学网提供内容。

attributes:g,全局匹配,i不区分大小写,m执行多行匹配,用最多的为g和i

管理学中你应该知道的原理瀑布效应瀑布效应:英文名称(WaterfallEffect)瀑布不能分裂成小水滴时,自身带上正电,同时使周围的空气得到负电而产生负离子,身处瀑布旁的人会感到心情舒畅,这就叫“瀑。防恶意抓取,请查看原文,,真格学网提供内容。

2、第二种定义(//文本定义):/pattern/attributes.

我家也有这个问题,我弟媳妇是独生女,小侄女称呼她的外公外婆为爷爷奶奶,说生了二胎后,孩子随母姓。我表示可以理解,并支持!首先,从血缘关系上来说,孩子对于夫妻双方是一样的,孩子姓什么,真心不重要。如果有。防恶意抓取,请查看原文,,真格学网提供内容。

如:var reg = /abc/g;

云南石屏县的“花腰彝”。农民擅长边弹弦子边演唱的“海菜腔”民歌。李怀秀兄妹二人在“青歌赛”中一举成名。还有香格里拉的藏族青年农民会唱组合形式的民歌。昆明西山区官渡区的农民也特别会唱即兴编词的民歌和对唱。防恶意抓取,请查看原文,,真格学网提供内容。

exec和match的详细区别:

枸杞有免疫调节,抗氧化,抗衰老,抗肿瘤,抗疲劳,降血脂,降血糖,降血压,补肾,保肝,明目,养颜,健脑,排毒,保护生殖系统,抗辐射损伤等功能。很多人喜欢用枸杞泡水或煲汤,其实枸杞虽然具有很好的滋补和治疗。防恶意抓取,请查看原文,,真格学网提供内容。

1、exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:

日常对于嘴唇,要记得去角质。去角质不仅仅是清洁,其实也帮助唇部避免脱妆。用红糖+橄榄油自制磨砂膏也可以买市面上的磨砂膏唇部专用产品。让嘴唇keep住最柔软最好的状态。开始涂口红的时候,需要做些什么呢?。防恶意抓取,请查看原文,,真格学网提供内容。

如上定义 

随着文玩热的兴起,越来越多的年轻人成为引领手串时尚潮流的生力军,盘戴手串在年轻人之中也已蔚然成风。与成熟人士侧重人文历史传承不同,年轻人的选择更加感性,更讲“眼缘”,世间尤物万万千千,只钟情怦然心动的。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("abc") ; var str = "3abc4,5abc6"; reg.exec(str ); 

2、match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达,如

里皮在当今足坛名帅里具体排名第几这个不好评价,但是可以肯定一点的是,意大利“银狐”绝对是当今足坛最优秀的足球主教练之一!他的球员生涯其实并不出彩,可以用平淡无奇来形容。但自从1982年执教桑普多利亚青。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("abc") ; var str = "3abc4,5abc6"; str.match(reg);

3、exec和match返回的都是数组(正则表达式无子表达式,并且定义为非全局匹配)

很巧,我有一篇文章就是详述金字塔的未解之谜,看过了你就知道靠当时的人力和技术建造金字塔有多么不可思议!金字塔建造技术的种种谜团,究竟是外星人建造的还是另一个文明的遗迹?古老的吉萨金字塔已经令人类惊叹几。防恶意抓取,请查看原文,,真格学网提供内容。

如果exec执行的正则表达式没有子表达式(小括号内的内容,如/abc(\s*)/中的(\s*) ),如果有匹配,就返回第一个匹配的字符串内容,此时的数组仅有一个元素,如果没有匹配返回null;

就目前来看,1980年1元人民币的价格虽然不算高,尤其跟“钞王”1980年50元人民币相比,因为“钞王”1980年50元人民币已经升到1000每张了。可是,跟1996年1元人民币相比,1980年1元人。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("abc") ; var str = "3abc4,5abc6"; alert(reg.exec(str)); alert(str.match(reg));

执行如上代码,你会发现两者内容均为一样:abc,

延边富德应该是要预定一个降级名额了,这两年中超升班马反而在赛季中段就离开了降级区,而第二年往往比较危险,刚刚降级的永昌就是个例子。其实这样现象也不是没有道理的,升班马第一年刚上来,大家对他的打法都不熟。防恶意抓取,请查看原文,,真格学网提供内容。

4、如果定义正则表达对象为全局匹配如(正则表达式无子表达式,并且定义为全局匹配)

最好做个鉴定证书,现在假货太多。并不一定原产地的东西就便宜,或者性价比高。国内商场的珠宝先不论品质如何,但几乎没假货,就是价格真的高。你这个戒指从图片上看颜色暗,而且里面杂质好像很多。所以他会做成素面。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("abc","g") ; var str = "3abc4,5abc6"; alert(reg.exec(str)); alert(str.match(reg));

则 为abc和abc,abc;因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。

材料:泡发的黄豆,猪肉,胡萝卜,蒜苗,食用油,盐,美极鲜,酱油,辣椒油,鸡粉,水淀粉,内脂第一步:提前泡发黄豆(干黄豆100克)第二步:清洗干净黄豆后,加入800ML清水,放豆浆机中打成豆浆第三步:将。防恶意抓取,请查看原文,,真格学网提供内容。

5、当表示中含有子表达式的情况(正则表达式有子表达式,并且定义为非全局匹配):

谢谢邀请,首先看您需求倾向了,如果玩游戏推荐搭载\"骁龙835821\"的机器,那么2000价位符合这个配置的有:\"小米6\"(当然贵了一点,但目前是最便宜的835)各方面性能比较均衡,然后就是联想。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("a(bc)") ; var str = "3abc4,5abc6"; alert(reg.exec(str)); alert(str.match(reg));

你会发现两者执行的结果都是:abc,bc;

我觉得无所谓看不看得上,关键是是否适合。从一开始,人们都看好这两位中国台球界的金童玉女,但是那不过是人们一厢情愿罢了。丁俊晖是中国第一个斯诺克世界冠军,目前在世界斯诺克上也发展的非常好。而潘晓婷是中国。防恶意抓取,请查看原文,,真格学网提供内容。

6、当如果正则表达式对象定义为全局匹配(正则表达式有子表达式,并且定义为全局匹配)

我这里有一些方法你可以参考一下随着一众亲子综艺节目的走红,很多明星的小孩都展现在大众的眼前,使得好多宝妈那个羡慕啊,恨不得自己的娃也能跟明星的娃长一样美!好多宝妈看到像诺一啊、森碟啊、王诗龄啊、小甜馨。防恶意抓取,请查看原文,,真格学网提供内容。

var reg = new RegExp("a(bc)","g") ; var str = "3abc4,5abc6"; alert(reg.exec(str)); alert(str.match(reg));

则两者返回的结果是abc,bc和abc,abc,

总结为:

1、当正则表达式无子表达式,并且定义为非全局匹配时,exec和match执行的结果是一样,均返回第一个匹配的字符串内容;

2、当正则表达式无子表达式,并且定义为全局匹配时,exec和match执行,做存在多处匹配内容,则match返回的是多个元素数组;

3、当正则表达式有子表示时,并且定义为非全局匹配,exec和match执行的结果是一样如上边的第5种情况;

4、当正则表达式有子表示时,并且定义为全局匹配,exec和match执行的结果不一样,此时match将忽略子表达式,只查找全匹配正则表达式并返回所有内容,如上第6种情况;

也就说,exec与全局是否定义无关系,而match则于全局相关联,当定义为非全局,两者执行结果相同

不管哪门语言中都有括号。正则表达式也是一门语言,而括号的存在使这门语言更为强大。

对括号的使用是否得心应手,是衡量对正则的掌握水平的一个侧面标准。

括号的作用,其实三言两语就能说明白,括号提供了分组,便于我们引用它。

引用某个分组,会有两种情形:在JavaScript里引用它,在正则表达式里引用它。

本文内容虽相对简单,但我也要写长点。

内容包括:

1. 分组和分支结构

2. 捕获分组

3. 反向引用

4. 非捕获分组

5.相关案例

1. 分组和分支结构

这二者是括号最直觉的作用,也是最原始的功能。

1.1 分组

我们知道/a+/匹配连续出现的“a”,而要匹配连续出现的“ab”时,需要使用/(ab)+/。

其中括号是提供分组功能,使量词“+”作用于“ab”这个整体,测试如下:

var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]

1.2 分支结构

而在多选分支结构(p1|p2)中,此处括号的作用也是不言而喻的,提供了子表达式的所有可能。

比如,要匹配如下的字符串:

I love JavaScript
I love Regular Expression

可以使用正则:

var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") ); // true
console.log( regex.test("I love Regular Expression") ); // true

如果去掉正则中的括号,即/^I love JavaScript|Regular Expression$/,匹配字符串是"I love JavaScript"和"Regular Expression",当然这不是我们想要的。

2. 引用分组

这是括号一个重要的作用,有了它,我们就可以进行数据提取,以及更强大的替换操作。

而要使用它带来的好处,必须配合使用实现环境的API。

以日期为例。假设格式是yyyy-mm-dd的,我们可以先写一个简单的正则:

var regex = /\d{4}-\d{2}-\d{2}/;

然后再修改成括号版的:

var regex = /(\d{4})-(\d{2})-(\d{2})/;

为什么要使用这个正则呢?

2.1 提取数据

比如提取出年、月、日,可以这么做:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( string.match(regex) ); 
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]

match返回的一个数组,第一个元素是整体匹配结果,然后是各个分组(括号里)匹配的内容,然后是匹配下标,最后是输入的文本。(注意:如果正则是否有修饰符g,match返回的数组格式是不一样的)。

另外也可以使用正则对象的exec方法:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( regex.exec(string) ); 
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]

同时,也可以使用构造函数的全局属性$1至$9来获取:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
regex.test(string); // 正则操作即可,例如
//regex.exec(string);
//string.match(regex);
console.log(RegExp.$1); // "2017"
console.log(RegExp.$2); // "06"
console.log(RegExp.$3); // "12"

2.2 替换

比如,想把yyyy-mm-dd格式,替换成mm/dd/yyyy怎么做?

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, "$2/$3/$1");
console.log(result); // "06/12/2017"

其中replace中的,第二个参数里用$1、$2、$3指代相应的分组。等价于如下的形式:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function() {
 return RegExp.$2 + "/" + RegExp.$3 + "/" + RegExp.$1;
});
console.log(result); // "06/12/2017"

也等价于:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function(match, year, month, day) {
 return month + "/" + day + "/" + year;
});
console.log(result); // "06/12/2017"

3. 反向引用

除了使用相应API来引用分组,也可以在正则本身里引用分组。但只能引用之前出现的分组,即反向引用。

还是以日期为例。

比如要写一个正则支持匹配如下三种格式:

2016-06-12

2016/06/12

2016.06.12

最先可能想到的正则是:

var regex = /\d{4}(-|\/|\.)\d{2}(-|\/|\.)\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // true

其中/和.需要转义。虽然匹配了要求的情况,但也匹配"2016-06/12"这样的数据。

假设我们想要求分割符前后一致怎么办?此时需要使用反向引用:

var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false

注意里面的\1,表示的引用之前的那个分组(-|\/|\.)。不管它匹配到什么(比如-),\1都匹配那个同样的具体某个字符。

我们知道了\1的含义后,那么\2和\3的概念也就理解了,即分别指代第二个和第三个分组。

看到这里,此时,恐怕你会有三个问题。

3.1 括号嵌套怎么办?

以左括号(开括号)为准。比如:

var regex = /^((\d)(\d(\d)))\1\2\3\4$/;
var string = "1231231233";
console.log( regex.test(string) ); // true
console.log( RegExp.$1 ); // 123
console.log( RegExp.$2 ); // 1
console.log( RegExp.$3 ); // 23
console.log( RegExp.$4 ); // 3

我们可以看看这个正则匹配模式:

第一个字符是数字,比如说1,

第二个字符是数字,比如说2,

第三个字符是数字,比如说3,

接下来的是\1,是第一个分组内容,那么看第一个开括号对应的分组是什么,是123,

接下来的是\2,找到第2个开括号,对应的分组,匹配的内容是1,

接下来的是\3,找到第3个开括号,对应的分组,匹配的内容是23,

最后的是\4,找到第3个开括号,对应的分组,匹配的内容是3。

这个问题,估计仔细看一下,就该明白了。

3.2 \10表示什么呢?

另外一个疑问可能是,即\10是表示第10个分组,还是\1和0呢?答案是前者,虽然一个正则里出现\10比较罕见。测试如下:

var regex = /(1)(2)(3)(4)(5)(6)(7)(8)(9)(#) \10+/;
var string = "123456789# ######"
console.log( regex.test(string) );

3.3 引用不存在的分组会怎样?

因为反向引用,是引用前面的分组,但我们在正则里引用了不存在的分组时,此时正则不会报错,只是匹配反向引用的字符本身。例如\2,就匹配"\2"。注意"\2"表示对2进行了转意。

var regex = /\1\2\3\4\5\6\7\8\9/;
console.log( regex.test("\1\2\3\4\5\6\7\8\9") ); 
console.log( "\1\2\3\4\5\6\7\8\9".split("") );

chrome浏览器打印的结果:

4. 非捕获分组

之前文中出现的分组,都会捕获它们匹配到的数据,以便后续引用,因此也称他们是捕获型分组。

如果只想要括号最原始的功能,但不会引用它,即,既不在API里引用,也不在正则里反向引用。此时可以使用非捕获分组(?:p),例如本文第一个例子可以修改为:

var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]

5. 相关案例

至此括号的作用已经讲完了,总结一句话,就是提供了可供我们使用的分组,如何用就看我们的了。

5.1 字符串trim方法模拟

trim方法是去掉字符串的开头和结尾的空白符。有两种思路去做。

第一种,匹配到开头和结尾的空白符,然后替换成空字符。如:

function trim(str) {
 return str.replace(/^\s+|\s+$/g, '');
}
console.log( trim(" foobar ") ); // "foobar"

第二种,匹配整个字符串,然后用引用来提取出相应的数据:

function trim(str) {
 return str.replace(/^\s*(.*?)\s*$/g, "$1");
}
console.log( trim(" foobar ") ); // "foobar"

这里使用了惰性匹配*?,不然也会匹配最后一个空格之前的所有空格的。

当然,前者效率高。

5.2 将每个单词的首字母转换为大写

function titleize(str) {
 return str.toLowerCase().replace(/(?:^|\s)\w/g, function(c) {
 return c.toUpperCase();
 });
}
console.log( titleize('my name is epeli') ); // "My Name Is Epeli"

思路是找到每个单词的首字母,当然这里不使用非捕获匹配也是可以的。

5.3 驼峰化

function camelize(str) {
 return str.replace(/[-_\s]+(.)?/g, function(match, c) {
 return c ? c.toUpperCase() : '';
 });
}
console.log( camelize('-moz-transform') ); // MozTransform

首字母不会转化为大写的。其中分组(.)表示首字母,单词的界定,前面的字符可以是多个连字符、下划线以及空白符。正则后面的?的目的,是为了应对str尾部的字符可能不是单词字符,比如str是'-moz-transform '。

5.4 中划线化

function dasherize(str) {
 return str.replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
}
console.log( dasherize('MozTransform') ); // -moz-transform

驼峰化的逆过程。

5.5 html转义和反转义

// 将HTML特殊字符转换成等值的实体
function escapeHTML(str) {
 var escapeChars = {
 '¢' : 'cent',
 '£' : 'pound',
 '¥' : 'yen',
 '': 'euro',
 '©' :'copy',
 '®' : 'reg',
 '<' : 'lt',
 '>' : 'gt',
 '"' : 'quot',
 '&' : 'amp',
 '\'' : '#39'
 };
 return str.replace(new RegExp('[' + Object.keys(escapeChars).join('') +']', 'g'), function(match) {
 return '&' + escapeChars[match] + ';';
 });
}
console.log( escapeHTML('<div>Blah blah blah</div>') );
// => <div>Blah blah blah</div>

其中使用了用构造函数生成的正则,然后替换相应的格式就行了,这个跟本文没多大关系。

倒是它的逆过程,使用了括号,以便提供引用,也很简单,如下:

// 实体字符转换为等值的HTML。
function unescapeHTML(str) {
 var htmlEntities = {
 nbsp: ' ',
 cent: '¢',
 pound: '£',
 yen: '¥',
 euro: '',
 copy: '©',
 reg: '®',
 lt: '<',
 gt: '>',
 quot: '"',
 amp: '&',
 apos: '\''
 };
 return str.replace(/\&([^;]+);/g, function(match, key) {
 if (key in htmlEntities) {
 return htmlEntities[key];
 }
 return match;
 });
}
console.log( unescapeHTML('<div>Blah blah blah</div>') );
// => <div>Blah blah blah</div>

通过key获取相应的分组引用,然后作为对象的键。

5.6 匹配成对标签

要求匹配:

<title>regular expression</title>
<p>laoyao bye bye</p>

不匹配:

<title>wrong!</p>

匹配一个开标签,可以使用正则<[^>]+>,

匹配一个闭标签,可以使用<\/[^>]+>,

但是要求匹配成对标签,那就需要使用反向引用,如:

var regex = /<([^>]+)>[\d\D]*<\/\1>/;
var string1 = "<title>regular expression</title>";
var string2 = "<p>laoyao bye bye</p>";
var string3 = "<title>wrong!</p>";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // false

其中开标签<[^>]+>改成<([^>]+)>,使用括号的目的是为了后面使用反向引用,而提供分组。闭标签使用了反向引用,<\/\1>。

另外[\d\D]的意思是,这个字符是数字或者不是数字,因此,也就是匹配任意字符的意思。

总结

以上所述是小编给大家介绍的正则表达式中test、exec、match的区别介绍及括号的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

想养狗一定要做好心理准备!一定,一定,一定!!!重要的事情说三遍1、狗毛遍地,好在金毛掉的毛会自己滚成一团2、做好撕家的准备,会咬它能看见的一切东西,特别是贵重物品,可怜我才买两个月的400块的铁三角,当然耐心教导之后会好很多!3、做好4个月前,满屋拖尿擦屎的准备!4个月后基本能够在家定点和出门再拉屎撒尿!4、每周洗澡,光吹干毛发需要30分钟以上,并且狗毛满天飞!好在金毛喜欢水,洗澡很乖!5、狗粮、营养品及药品要跟得上,补钙的,美毛的,内外驱虫的,清洁耳朵的!这样才会美美哒6、每天抽时间遛狗,半小时到1小时以上吧!还要在遛狗的过程中,教它跟随,不暴冲,不乱吃东西,不扑人(特别是孩子)7、还得随先不说蛋清敷脸有什么好处,先来说说有什么坏处吧。生的鸡蛋比较容易有沙门氏菌感染的可能,因为这种细菌在禽类身上比较常见,在生蛋的过程中,鸡蛋中也会存在这类细菌。如果烹调合理的话,细菌很容易被杀死,但是对于蛋清敷脸来说,鸡蛋肯定是没有烹调过的,因此脸上会沾染许多沙门氏菌,不小心进入肠道的话,很有可能导致腹泻、发烧等症状。然后我还想重申一下,日常的食物就是食物,不要当作护肤品来用。现在面膜产品也不是很贵,平价的几块钱一片就可以买到,没有必要为了省这点钱用黏糊糊的蛋清来敷脸,使用感很差,而且还真没什么效果。蛋清里主要的成分是一些蛋白质和多糖,此外还有些微量元素。有些人天真地认为有蛋白质的蛋清可以补充皮


  • 本文相关:
  • javascript正则表达式小结(test|match|search|replace|split|exec)
  • js正则表达式中test,exec,match方法的区别说明
  • js的正则test,match,exec详细解析
  • js正则函数match、exec、test、search、replace、split使用介绍集合
  • js使用正则控制用户输入银行卡号及格式化
  • 基于正则表达式实现ul下li的样式替换功能
  • 编程语言中十六进制的正则匹配
  • 正则表达式提取图片路径 并过滤掉指定字符的写法
  • asp只采集网站可见文本的正则
  • 用正则查找html中有id属性的html标签
  • php正则表达式完全教程之提高篇
  • 移除html标签的正则表达式
  • php中常用的正则表达式的介绍及应用实例代码
  • 学php正则!超基础简单例子
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved