正则表达式随记(2)

来源:互联网 发布:磁力看片软件 编辑:程序博客网 时间:2024/04/28 19:09
一、正则表达式规则:
    
表达式
可匹配
备注
\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 )  都是不可以的。注释中的反斜杠(\),不代表转义字符。


















0 0