一、正则表达式规则:
表达式 可匹配 备注\r,\n 回车符,换行符
\t 制表符
\\ 代表‘\’本身
\^匹配‘^’本身
\$ 匹配‘$’本身
\. 匹配小数点(.)本身 ('ad$12.3').match(/\$\d+.\d/)。结果为$12.3 \d任意一个数字,0~9 中的任意一个 ('ad$12.3').match(/\$\d+/)。结果为$12\w 任意一个字母或数字或下划线,也就是a-z,A-Z,0-9,‘_’中的任意一个 ('sdf_sdf').match(/\w_\w/)。结果为f_s\s 包括制表符、空格、换页符的其中任意一个 ('sdf_sdf \n').match(/\w_\w+\s\s/)。结果为["f_sdf"]. 小数点可以匹配除了换行符‘\n’以外的任意一个字符 ('sdf_sd ff').match(/\w_\w+\s./)。结果为["f_sd f"][] 使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符 ('fhsgfh').match(/[asd]/)。结果为["s"] [^] 用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符 [^A-F0-3]:匹配 "A"~"F","0"~"3" 之外的任意一个字符 {n} 匹配表达式重复n次 ('aaaadsfsd').match(/a{4}d/):结果为aaaad {m,n}匹配至少重复m次,至多重复n次 ('aaaaaaaadsfsd').match(/a{1,4}d/)。结果为["aaaad"] {m,} 匹配至少重复m次 ('aaaaaaaadsfsd').match(/a{1,}d/)。结果为["aaaaaaaad"]? 匹配表达式0次或者1次,相当于{0,1} ('aaaaaaaadsfsd').match(/a?d/)。结果为["ad"]+ 匹配至少重复1次,相当于{1,} ('aaaaaaaadsfsd').match(/a+d/)。结果为["aaaaaaaad"];('dsfsd').match(/a+d/)。结果为null * 匹配表达式不出现或出现任意次,相当于{0,} ('aaaaaaaadsfsd').match(/a*d/)。结果为["aaaaaaaad"];('dsfsd').match(/a*d/)。结果为["d"] ^与字符串开始的地方匹配,不匹配任何字符 ('GGGaaaaa').match(/^aaa/)。结果为null;('aaaaaddd').match(/^aaa/)。结果为["aaa"]$ 与字符串结束的地方开始匹配,不匹配任何字符 ('GGGaaaaaaFFF').match(/aaa$/)。结果为null;('GGGaaaaaa').match(/aaa$/)。结果为["aaa"]\b 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符 ("weekend,endfor,end").match(/\bend\b/)。结果为["end"] | 左右两边表达式之间 "或" 关系,匹配左边或者右边 ("I'm Tom, he is Jack").match(/Jack|Tom/)。结果为["Tom"]
()分组:用括号 ( ) 将其他表达式包含,可以使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。
另外,用括号包含的表达式,所匹配到的内容将单独作记录,匹配过程中或结束后可以被获取。
('dsfjsjaaaajjjjdddd').match(/a(jjjj)d/)。结果为["ajjjjd", "jjjj"]返回true
贪婪模式 定义:尽可能多的匹配符合它规则的字符, 同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,d***d***d
1、(d)(/w+): "\w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd";2、(d)(/w+)(d):"\w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "\w+" 也能够匹配上最后一个 "d",但是为了使整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d" 1、 ('aaadkjfhn').match(/(d)(\w+)/)。结果为 [ "dkjfhn" , "d" , "kjfhn" ]返回true;2、('aaadkjfhndfgf').match(/(d)(\w+)(d)/)。结果为["dkjfhnd", "d", "kjfhn", "d"]返回true;3、('aaadkjfhndfgfd').match(/(d)(\w+)/)结果为["dkjfhndfgfd", "d", "kjfhndfgfd"]返回true;4、 ('aaadkjfhn').match( /(d)(\w+)(d)/ )结果为null返回false;
非贪婪模式(勉强模式)定义:在限定符之后添加问号(?)。勉强模式的限定符,总是尽可能少的匹配。如果之后的表达式匹配失败,勉强模式也可以尽可能少的再匹配一些,以使整个表达式匹配成功,d***d***d
1、(d)(\w+?):"\w+?" 将尽可能少的匹配第一个 "d" 之后的字符,结果是:"\w+?" 只匹配了一个 "x";
2、(d)(\w+?)(d):为了让整个表达式匹配成功,"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配,从而使整个表达式匹配成功。因此,结果是:"\w+?" 匹配 "xxx"
1、('aaadkjfhndfgfdf').match(/(d)(\w+?)(d)/)。结果为["dkjfhnd", "d", "kjfhn", "d"]返回true;2、('aaadkjfhn').match(/(d)(\w+?)/)。结果为('aaadkjfhn').match(/(d)(\w+?)/)返回true;3、('aaad').match(/(d)(\w+?)/)。结果为null返回false;
占有模式
在限定符之后添加加号(+)。占有模式的限定符,总是尽可能多的匹配。与“贪婪模式”不同的是,即使之后的表达式匹配失败,“占有模式”也不会“让出”自己能够匹配的字符。 1、(/a(\w{1,4}+)d/).test('dsfjsjaaaajjjjdddd')。结果为["aaaajjjjdddd", "dd"]返回true;2、('dsfjsjaaaajjjjdddd').match(/a(\w{1,4})d/)。结果为["ajjjjd", "jjjj"]返回true;3、(/a(\w{1,3}+)d/).test('dsfjsjaaaajjjjdddd')。结果为["aaaajjjjdddd", "d"]返回true;4、('dsfjsjaaaajjjjdddd').match(/a(\w{1,3})d/)。结果为null返回false。
转义字符
1、标点符号在正则表达式中,被定义了特殊的意义,需要在前面加 "\" 进行转义后,匹配该字符本身。2、使用 \Q 开始,\E 结束,可使中间的标点符号失去特殊意义,将中间的字符作为普通字符。使用 \U 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的小写字母转换成大写。在大小写敏感模式下,只能与大写文本匹配。
使用 \L 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的大写字母转换成小写。在大小写敏感模式下,只能与小写文本匹配。
注:\Q...\E 适合用于:表达式中需要比较长的普通文本,而其中包含了特殊符号。
1、 ('dfgd(a+b)*3fdgfd').match(/\(a\+b\)\*3/)。结果为 [ "(a+b)*3" ]返回true;2、
\Q(a+b)*3\E
可匹配文本 "(a+b)*3"。
(?#xxx)
注释: 注释可以位于表达式中任意地方,但不可以出现在转义字符(\)与被转移字符中间。比如: \(?# xxx )w 是不可以的,这样写的效果实际上是第一个括号被转义成普通字符了。在 (?# 之后,遇到第一个反括号将表示注释结束。因此,想把注释写成 (?# x()xx ) 或者 (?# x\)xx ) 都是不可以的。注释中的反斜杠(\),不代表转义字符。