正则表达式:对字符串中的信息实现查找、替换和提取操作。(不支持注释和空白,必须写在一行内)
正则表达式的创建:包含在一对斜杠之间的字符(直接量语法)
例如:
var pattern = /s$/; // 创建一个正则来匹配所有以字母s结尾的字符串,并赋值给pattern
一 、字符类
将直接量字符单独放进方括号内就组成了字符类。
一个字符类可以匹配它所包含的任意字符。
正则表达式的字符类:
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词 等价于[a-zA-Z0-9]
\W 任何非ASCII字符组成的单词 等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符
\d 任何ASCII数字 等价于[0-9]
\D 任何非ASCII数字 等价于[^0-9]
[\b] 退格直接量(特例)
例如:/[a,b,c]/ 表示和字母a,b,c中的任意一个都匹配
/[\s\d]/ 表示匹配任意空白字符或者数字
二、重复
用以表示指定字符重复的标记
正则表达式的重复字符语法:
{n,m} 匹配前一项至少n次,但不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,也就是前一项是可选的,等价于{0,1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次,等价于{0,}
例如:/\d{2,4}/ 匹配2~4个数字
/\w{3}\d/ 精确匹配3个单词和一个可选数字
三、选择、分组和引用
匹配程序:从左到右,如果左边的匹配项匹配了,就自动忽略右边的匹配项(即使可以产生更好的匹配)
① | 用于分隔供选择的字符
例如: /ab|cd|ef/ 可以匹配字符串“ab”,"cd"或者“ef”
/\d{3}|[a-z]{4}/ 匹配3位数字或四个小写字母
② ()
作用一:把单独项合成子表达式
作用二:在完整的模式中定义子模式
当一个正则表达式成功的和目标字符串相匹配时,可以从目标字符串中抽出和圆括号中的子模式相匹配的部分。
例如:
/[a-z]+\d+/ 检索一个或多个小写字母后边跟着一个或多个数字
如果我们关心的是每个尾部的数字,则可以把模式的数字部分放到括号(/[a-z]+(\d)/),这样就可以从检索到的匹配中抽取数字了
作用三:允许在同一正则表达式的后部引入前面的子表达式
实现方法:在字符\后加一位或多位数字(这个数字指定了带圆括号的子表达式在正则表达式中的位置)
例如:\1 引用的是第一个带圆括号的子表达式
注: 位置以参与计数的左括号位置为准;
正则表达式不允许用双引号括起的内容中有单引号,反之亦然。
总结:
| 选择,匹配的是该字符左边的子表达式或右边的子表达式
(...) 组合,将几个项组合成一个单元
(...?) 只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
\n 和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式,组索引是从左到右的左括号数,(?: 这个形式的分组不参与索引编码
四、指定匹配的位置:
锚 : 指定匹配发生的合法位置
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界 (位于\w和\W之间的位置)
\B 匹配非单词边界的位置
五、修饰符