正则表达式
1. window系统的通配符: * 代表任意多个字符 ? 代表一个字符
2. 正则表达式是一种描述文本规则的代码
3. 正则表达式的应用范围:
模式验证(文本匹配)
文本搜索
文本替换
从文本中提取子字符串
4. 正则表达式对象的语法:
语法: (Perl语言)
var 变量名=/模式/[选项特性]
语法:
var 变量名=new RegExp("模式",["选项特性"]);
模式: 要使用的正则表达式.
选项特性:
g (查找字符串中所有的符合模式的字符串)
i (忽略大小写)
m (\n多行查找)
5. 正则表达式的用法:
String对象来使用正则表达式:
match(reg): 执行字符串匹配,返回所有的可以匹配上的子字符串数组
search(reg): 返回第一个符合规则的子字符串
replace(reg, 要替换的字符串): 替换
split(reg): 分隔字符串,返回数组
RegExp正则表达式对象直接使用
reg.test(要匹配的字符串): 判断指定的正则表达式文本是否存在
reg.exec(要匹配的字符串): 返回找到的第一个字符串
6. 简单模式:
1. 元字符: 特殊字符:
( { { \ ^ $ | ) ? * + .
要查元字符,要加\
2. 特殊字符: ASCII码 UNICoDE编码
\t \n \r \f.....
\0八进制
\u00654
3. 字符类: 代表一系列的字符,可以与其所包含的任何字符相匹配. 将它放入到一[]
(1)简单类: 直接将多个要匹配的字符放入[]
(2)负向类: 不区配[^要匹配的字符]: 与简单类正好相反
(3)范围类: - a-z 1-9
如果要查中文范围的话,请使用: [\u4e00-\u9fa5]
(4)组合类: 将以上三种类组合合成的类. 类之间不能有空格,不能嵌套[]
(5)预定义类: 封装常用的模式
. [^\n\r] 除了换行和回车外的任意字符
\d [0-9]
\D [^0-9]
\s [ \t\n\x0b\f\r] 空白字符
\S [^ \t\n\x0b\f\r]
\w [a-zA-z_0-9]
\W [^a-zA-z_0-9]
小结: 字符类注意点: 字符类[]中的每个字符只能匹配一个字符,而不能匹配整个[]中的全部字符
所以要匹配"第xxx章": /第[1-9][0-9]章/ /第[1-9]章/ /第[1-9][0-9][0-9]章/
-> 解决方案: 量词机制
4. 量词: 解决字符类不能匹配多个字符的情况.
? 零次或一次
* 任意次
+ 一次或多次
{n} 一定出现n次
{n,m} 最少出现n次,最多出现m次
{n,} 最少出现n次,最多不限
例如: /ba?d/ -> bd bad
/ba*d/ -> bd bad baad baaaaaaaaad
/ba+d/ -> bad baad baaaaaad
/ba{0,1}d/ -> bd bad
/b[ae]{1,2}d/ -> bad baad bed beed baed bead
第xxx章 -> /第[1-9]\d*章/ 1 10 11 1234
/\d{6}/
/[1-8a-z]{3,6}/
/he[lk]{1,2}o/
/0[1-4][01]/
5. 分组: 将匹配符分组后,就可以将多个字符象一个字符那样重复操作
()
注意: 分组可以嵌套:
例: /(bad)?/ /(bad){1,2}/ /(b[ae]d?)+/ /(bad( and bed)?)/
需求: 图书编号: 要么5个数字(10100), 要么是5个数字加-再加4个数字
/\d{5}(-\d{4})?/
6. 选择: |
7. 反向引用: 当正则表达式计算完每个分组()后,将匹配的结果存到一个RegExp的属性$n中
8, 非捕获性分组:
语法: (?:分组条件): ?:表示分组条件运算的结果不保存