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……

你可能感兴趣的:(JavaScript - 正则表达式)