随缘到了JS正则表达式,就来写点!(有不对的地方请指出来)

所有的语言的正则表达式还有一些更强大的功能,比如

1、子表达式的索引和回溯

2、回溯引用在replace中的应用

3、(肯定 | 否定)向前查找

4、(肯定 | 否定)向后查找 ===> JS不支持

5、条件查找 ===>JS不支持 Orz......

下面说的均是JS的正则


一、子表达式的索引和回溯

JS中用括号括起来的大部分都可以成为一个子表达式(按照先后顺序从1到n),而整个正则则是第0个子表达式

例如:var reg = /(好).*?\1/g;  ===>  这里的“(好)”就是正个reg的  第一个  子表达式,后面的“\1”就代表着前面的第一个子表达式,因为是 1 嘛!

让我们来匹配点什么:var str ="你好吗?我很好!";

str.match(reg) ===> 返回结果:["好吗?我很好"]

这里看到了,从第一个“好”,匹配到第二个好,这也就是我理解的子表达式的索引和回溯(我是这么叫它的)。

补一句,reg里面的“*?”是懒惰匹配,就是尽量少的匹配,懒惰匹配的原理就是在修饰符的后面几个“?”,因为“?”是匹配0次或者1次嘛,so你懂得。

二、回溯引用在replace中的应用

直接从简单的例子入手:

正则表达式:var reg = /-(\w)/g;

匹配str:var str ="my-love";

输出:console.log(str.replace(reg,function($0,$1) {

console.log($0);

console.log($1);

}));

结果如下图:


控制台结果


个人分析图如下:


分析图


相信看了上面的分析,大家也能明白个七八,只要在replace中的函数中 return $1.toLowerCase(),是不是就完成了将带横线的字符转为驼峰字符的功能?大家试一下就会了解。

这里面的“$1”我理解为正则里面的“/1”,也就是说和“/1”的思路是差不多的,只不过应该用到replace中,不过好像也只能用到replace中,其他方面我还没接触到。

三、(肯定 | 否定)向前查找

先问大家一个问题,如果给大家一段话,里面有数字、中文和40$,要求匹配$前面的数字并且不能匹配后面没有$符号的数字,大家会如何匹配呢?(先想一想)

就上面的问题来举例子,从例子入手:

匹配的str:var str ="我出50$买灵能100%第二季";

正则表达式:var reg = /\d+(?=\$)/g;

输出:console.log(str.match(reg));

结果为:["50"]

这个结果就是我们想要的,而“(?=\$)”就是所谓的(肯定)正向查找。

我的理解是:“(?=\$)”的“?=”的“=”后面是要匹配的关键字,如果匹配到,就用“\d+”(也就是(?=\$)之前的)来匹配关键字之前的字符串或者其他。但是最后不会包含这个关键字哦。现在看起来是不是特别贴合这个名字“向前查找”。

那么(否定)向前查找呢?

还是那个例子只不过把正则表达式换一下

正则表达式:var reg = /\d+(?!\$)/g; ===> 注意 这里 将“?=”变为“?!”

返回结果:["5", "100"]

为什么是这个结果呢?因为是否定的,也就是取反,从“?!”中的“!”可以看出,匹配的是 数字 加 $ 之外的数字,那么为什么会返回5呢,这个我猜想是懒惰匹配的,所以会匹配“0$”,将前面的“5”抛弃了,并且返回了被匹配字符串的所以其他数字,就是这样喵。

四、(肯定 | 否定)向后查找 和 条件查找不支持,所以就没必要说了。有兴趣的可以自己去看看。


以上内容均属个人简洁,不对的地方望指出,最后祝大家在前端之路上越来越顺利。

没有了~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,981评论 0 20
  • 前言 作为一个程序员,要出去装逼,手中必备的技能就是正则表达式。程序员的正则表达式,医生的处方和道士的鬼画符,都是...
    Layzimo阅读 534评论 0 6
  • RegExp是正则表达式的缩写正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 正则的定义方法...
    饥人谷_廖珍阅读 327评论 0 1
  • 《习惯的力量》 [美] 查尔斯·都希格 这本书之前,看了一点,感觉很受益,可是看见今天的分享内容,我却不知道该说什...
    映月黑珍珠阅读 189评论 3 2
  • 今天是阴历的10月初二,是祭奠先人的重要日子。以前知道给另一个世界的亲人送钱送吃要遵循早清明,晚十月一,意思就是清...
    慧眼识鱼阅读 1,298评论 2 7