在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符-
表示。如果在方括号内添加脱字符^
前缀,还可以表示范围之外的字符。例如:
- [abc]:查找方括号内任意一个字符。
- [^abc]:查找不在方括号内的字符。
- [0-9]:查找从 0 至 9 范围内的数字,即查找数字。
- [a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。
- [A-Z]:查找从大写 A 到大写 Z 范围内的字符,即查找大写字母。
- [A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个 n 的字符串 |
n* | 匹配任何包含零个或多个 n 的字符串 |
n? | 匹配任何包含零个或一个 n 的字符串 |
n{x} | 匹配包含 x 个 n 的序列的字符串 |
n{x,y} | 匹配包含最少 x 个、最多 y 个 n 的序列的字符串 |
n{x,} | 匹配包含至少 x 个 n 的序列的字符串 |
针对 6 种重复类惰性匹配的简单描述如下:
- {n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
- {n}?:尽量匹配 n 次。
- {n,}?:尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
- ??:尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。
- +?:尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。
- *? :尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。
量词 | 说明 |
---|---|
^ | 匹配开头,在多行检测中,会匹配一行的开头 |
$ | 匹配结尾,在多行检测中,会匹配一行的结尾 |
正向声明:匹配模式 (?= 匹配条件)
指定匹配模式后面的字符必须被匹配,但又不返回这些字符。
反向声明:匹配模式(?! 匹配条件)
与正向声明匹配相反,指定接下来的字符都不必被匹配。
JavaScript里正则常用API
一、5个常用方法:
1. test
reg.test(str); // 返回是否包含正则 true/false
var str = "abcdefghijkl3mnop2qts";
/\d/.test(str); // true
2. match
str.match(reg); // 一般正则表达式加g,会返回包含所有匹配项的数组
var str = "abcdefghijkl3mnop2qts";
str.match(/\d/g); // ["3", "2"]
3. search
str.search(reg); // 返回第一条匹配的索引位置
var str = "abcdefghijkl3mnop2qts";
str.search(/\d/); // 12
4. replace
str.replace(str/reg, replacement); // 不改变原字符串,返回新字符串
5. exec
在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。
var reg = /\d/g;
var str = "abcdefghijkl3mnop2qts";
reg.exec(str); // ["3", index: 12, input: "abcdefghijkl3mnop2qts", groups: undefined]
// 可以使用 reg.lastIndex 判断目前的执行进度
reg.lastIndex; // 13
reg.exec(str); // ["2", index: 17, input: "abcdefghijkl3mnop2qts", groups: undefined]
reg.exec(str); // null
// 之后循环往复