正则表达式

一、所有关键字


二、贪婪与非贪婪

  • *、+、{n,m}等字符都是默认贪婪的,会尽可能多的匹配字符
  • 当需要进行非贪婪匹配的时候在贪婪关键字后加上?
no{0,2}b      匹配noob > nob > nb,尽可能多匹配
no{0,2}?b     匹配nb > nob > noob,注意?前面不是字符而是关键字

三、多个()是并且的匹配关系

(a)(b)    匹配ab

四、捕获与反向引用

  • 捕获是捕获文本的意思,而不是捕获正则表达式
  • 使用()的表达式都是捕获的
  • 使用(?:)的表达式则不会进行捕获保存,没有捕获编号,也不会将捕获文本保存进内存中
  • 捕获组可以通过从左到右计算其开括号来编号 。例如,在表达式 (A)(B(C)) 中,存在四个这样的组:
\0  (A)(B(C))  组零始终代表整个表达式
\1  (A)  
\2  (B(C))
\3  (C)
  • 反向引用 是说在后面的表达式中我们可以使用组的编号来引用前面的表达式所捕获到的文本序列。

  • 注意:反向引用,引用的是前面捕获组中的文本而不是正则表达式,也就是引用的是捕获表达式的执行结果,二者的执行必须一致,这一点很重要。

 (["']).*\1   
  • 其中使用了分组,\1就是对引号这个分组的引用,它匹配包含在两个引号或者两个单引号中的所有字符串,如,"abc" 或 " ' " 或 ' " ' ,但是请注意,它并不会对" a'或者 'a"匹配。原因上面已经说明,Back引用只是引用文本而不是表达式。
(?:a|A)123(?:b)    --非捕获组可以匹配a123b或者A123b

五、零宽断言

  • 零宽断言有四种
1.(?=pattern)   --正向肯定零宽断言
2.(?!pattern)   --正向否定零宽断言
4.(?<=pattern)  --反向肯定零宽断言
5.(?<!pattern)  --反向否定零宽断言
  • 对于JS来说反向零宽断言是不支持的,很多语言都不支持,因为正向零宽断言通过改变其位置就可以达到反向断言的目的
  • 断言不能单独存在和使用
  • 断言在正则中表示额外条件的意思,拿“正向肯定零宽断言”来说
1.“正向”  --表示匹配顺序是从左到右
2.“肯定”  --表示如果断言满足表达式,则断言部分匹配通过,再去匹配主表达式
3.“零宽”  --表示匹配不消耗字符
4.“断言”  --表示片段的语言,也就是说是匹配的一部分,与主表达式一起才是完整的匹配
  • 举例
asad11  //通过
^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{6,20}$
  • 从左到右匹配,首先匹配^ 发现后面是一个正向否定零宽断言,匹配断言,看是否是由纯数字组成(全局^作用于整个表达式),如果是则断言匹配失败,成功继续向后发现又是一个正向否定零宽断言,由于断言匹配不消耗字符又会从字符串的第一个字符开始匹配,判断是否是纯字母组成,匹配成功则向后匹配,后面是一个主表达式,由于断言不消耗字符,主表达式还是从第一个字符开始匹配字符串,如果成功则匹配完成,根据断言与主表达式的全部结果是否成功决定是否匹配成功

六、定界符

  • 注意,$、^对于正则表达式和要匹配的内容而言都是指所有整个内容

  • 定位符作用于整个表达式,包括子表达式

^([0-9]+)$
等价于
^[0-9]+$
等价于
^([0-9]+$)  会结合上前面的^
[0-9]+      会匹配58x9s,不是纯数字,因为没规定以什么结尾
[0-9]+$     会匹配ads32131,也不是纯数字,没规定以什么开头
^[0-9]+$    匹配纯数字,以([0-9]+)开头,以([0-9]+)结尾,并且内容也是([0-9]+)

七、模式符

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

推荐阅读更多精彩内容