JavaScript - 正则表达式

定义

正则表达式就是用一个"字符串"来描述一个特征,然后区验证另一个"字符串"是否符合这个特征

用途

  1. 验证字符串是否符合指定特征,比如验证邮件地址
  2. 从一个长文本中查找指定字符串,使用更加灵活
  3. 替换指定文本

普通规则

表达式 作用
a 匹配单个字符a
2 匹配单个字符2
\r, \n 匹配回车, 换行符
\t 匹配制表符 TAB
\ 匹配''本身
^ 匹配'^'本身
$ 匹配'$'本身
. 匹配'.'本身
\d 匹配任意一个0-9的数字
\w 匹配任意一个字母或数字或下划线,也就是A-Z, a-z, 0-9, _ 中任意一个
\s 匹配包括空格、制表符、换页符等空白字符的任意一个
. 匹配除换行符\n以外的任意一个字符(包括数字)
[ab5@] 匹配'a' 或 'b' 或 '5' 或 '@'中的任意一个
[^abc] 匹配'a' 'b' 'c' 之外的任意一个字符
[a-z] 匹配'a' 到 'z' 的任意一个字符
[A-Z] 匹配'A' 到 'Z' 的任意一个字符
[A-Z0-3] 匹配'A' 到 'Z' 以及 0 到 3 的任意一个字符
[^A-Z0-3] 匹配除'A' 到 'Z' 以及 0 到 3 以外的任意一个字符
{n} 表达式重复n次, 比如 '\w{2}'相当于\w\w, 'a{5}'相当于aaaaa
{m, n} 表达式至少重复m次,最多重复n次, 比如'ba{1,3}'可以匹配'ba'或'baa'或'baaa'
{m,} 表达式至少重复m次,没有上限,比如'\w\d{2,}'可以匹配'a12', '_456', 'M1223'等
? 表达式匹配0次或者1次,相当于{0,1},比如'a[cd]?'可以匹配'a', 'ac', 'ad'
+ 表达式匹配至少1次,相当于{1,},比如'a+b'可以匹配'ab', 'aab', 'aaab'等
* 表达式匹配0次或任意次,相当于{0,},比如'^*b'可以匹配'b', '^b', '^^b'等
^ 从字符串开始的地方匹配,不匹配任何字符, 比如'^12'可以匹配'12kp',结果为'12', 不能匹配'kp12'
$ 从字符串结束的地方匹配,不匹配任何字符,比如'12$'可以匹配'kp12',结果为'12',不能匹配'12kp'
\b 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符,即一边是属于\w,另一边不属于\w,比如:用'./b.'去匹配"abc_123中文d3=efg汉字%",结果是'3中', '文', '3=', 'g汉', 又比如用'\bto\b'去匹配'today to too'得到结果是:'to', 'today'以及'too'中的to并不能被匹配到,因为\b要求一边属于\w,另一边不属于\w,而'today'中的'd'也属于\w范围内
竖线 左右两边表达式是'或'的关系,匹配左边或者右边
() (1) 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 (2) 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

高级规则

  • 贪婪与非贪婪

** 贪婪模式 **

在使用修饰匹配次数的特殊符号时,有多种表示方法可以使同一个表达式能够匹配不同的次数,比如: '{m,n}', '{m,}', '?', '*', '+', 具体匹配的次数随被匹配字符串而定,这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配,比如,针对文本'dxxxdxxxd',举例如下:

表达式 匹配结果
(d)(\w+) '\w+' 将匹配第一个'd'之后的所有字符'xxxdxxxd'
(d)(\w+)(\d) '\w+'将匹配第一个'd'和最后一个'd'之间的所有字符'xxxdxxx', 虽然'\w+'也能匹配上最后一个'd',但是为了使整个表达式匹配成功,'\w+'可以让出它本来能够匹配的最后一个'd'

由此可见,'+', '*', '{m,n}'等表达式都是尽可能多的匹配,带'?'的表达式在可匹配可不匹配的时候,也是尽可能的要匹配,这种匹配原则叫做'贪婪'模式

非贪婪模式

在修饰匹配次数的特殊符号后再加上一个'?'号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的不匹配,这种匹配原则叫做'非贪婪'模式,也叫做'勉强'模式,如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功,举例如下,针对文本'dxxxdxxxd'匹配:

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

推荐阅读更多精彩内容