RegExp 对象
生成一个 RegExp 对象有三种方式,字面量,构造函数均可以:正则表达式
// 字面量
var newExp1 = /pattern/ flags;
// 构造函数
var newExp2 = new RegExp(pattern [, flags]);
字面量方式参数没必要添加引号,而构造函数方式,参数加引号。数组
其中,pattern 为正则表达式文本,flags 表明标志,常见的标志有:函数
g 全局匹配
i 忽略大小写
m 多行
u Unicode
y 粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(而且不尝试从任何后续的索引匹配)
正则表达式中特殊字符的含义
字符类别
“ . ” 点号,小数点,匹配任意单个字符(但行结束符 \n \r \u2028 \u2029 除外),要注意的是在字符集中,点( . )失去其特殊含义,并匹配一个字面点( . )。多行制表符中能够使用 “[^]” 来匹配任意字符。prototype
- \d 匹配任意数字,至关于 [0-9]
- \D 匹配任意非数字,至关于 [^0-9]
- \w 匹配任意来自基本拉丁字母表中的字母数字字符,至关于 [A-Za-z0-9]
- \W 匹配任意不是基本拉丁字母表中单词,至关于[^A-Za-z0-9]
- \s 包括空格、制表符、换页符、换行符和其余 Unicode 空格
- \S 匹配一个非空白符。
- \t 水平制表符(tab)
- \r 回车符
- \n 换行符
[\b] 退格符code
字符集合
- [XYZ] 一个字符集合,匹配集合中的任意‘一个’字符,也能够使用[A-Z]的模式
- [^XYZ]匹配任意不在括号内的字符,同理,也能够使用[^A-Z]的模式
边界
- “^” 匹配输入开始 /^A/
- “$” 匹配输入结束 /Z$/
- “\b” 匹配一个零宽单词边界 如 /\bno/ 匹配 at noon 中的 "no" , 用法 /\bA/,/A\b/
- “\B” 匹配一个零宽非单词边界
数量词
- A* 匹配0次或者屡次
- A+ 匹配至少一次或者屡次
- A?,A+? 最小可能匹配,例如,/".?"/ 匹配 '"foo" "bar"' 中的 '"foo"',而 * 后面没有 ? 时匹配 '"foo" "bar"'。
- A? 匹配前面的模式 x 0 或 1 次。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
- x(?=y)只有当 x 后面紧跟着 y 时,才匹配 x。
- x(?!y)只有当 x 后面不是紧跟着 y 时,匹配 x 。
- x|y 匹配 x 或 y
- x{n} n 是一个正整数。前面的模式 x 连续出现 n 次时匹配。
- x{n,} n 是一个正整数。前面的模式 x 连至少连续出现 n 次时匹配。
- x{n,m} n 和 m 为正整数。前面的模式 x 连续出现至少 n 次,至多 m 次时匹配。
分组
- (x) 匹配 x 而且捕获匹配项
- \n n是一个正整数。一个反向引用(back reference),指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串。
- (?:x) 匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses)。匹配项不可以从结果数组的元素 [1], ..., [n] 或已被定义的 RegExp 对象的属性 $1, ..., $9 再次访问到。
RegExp 经常使用方法
- RegExp.prototype.exec(str) 匹配字符串,返回数组
- RegExp.prototype.test(str) 匹配字符串,返回布尔值
- RegExp.prototype.toString() 无输入参数,返回对象字面量的字符串形式
具体的参见MDN。regexp