RegExp
语法
js
// var patt = new RegExp(pattern, modifiers);
var re = new RegExp("\\w+");
// var patt = /pattern/modifiers;
var re = /\w+/;
// var patt = new RegExp(pattern, modifiers);
var re = new RegExp("\\w+");
// var patt = /pattern/modifiers;
var re = /\w+/;
修饰符
i
执行对大小写不敏感的匹配。g
执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。m
执行多行匹配。
方括号
[abc]
查找方括号之间的任何字符。[^abc]
查找任何不在方括号之间的字符。[0-9]
查找任何从 0 至 9 的数字。[a-z]
查找任何从小写 a 到小写 z 的字符。[A-Z]
查找任何从大写 A 到大写 Z 的字符。[A-z]
查找任何从大写 A 到小写 z 的字符。[adgk]
查找给定集合内的任何字符。[^adgk]
查找给定集合外的任何字符。(red|blue|green)
查找任何指定的选项。
元字符
.
查找单个字符,除了换行和行结束符。\w
查找数字、字母及下划线。\W
查找非单词字符。\d
查找数字。\D
查找非数字字符。\s
查找空白字符。\S
查找非空白字符。\b
匹配单词边界。\B
匹配非单词边界。\0
查找 NULL 字符。\n
查找换行符。\f
查找换页符。\r
查找回车符。\t
查找制表符。\v
查找垂直制表符。\xxx
查找以八进制数 xxx 规定的字符。\xdd
查找以十六进制数 dd 规定的字符。\uxxxx
查找以十六进制数 xxxx 规定的 Unicode 字符。
量词
n+
匹配任何包含至少一个 n 的字符串。n*
匹配任何包含零个或多个 n 的字符串。n?
匹配任何包含零个或一个 n 的字符串。n{X}
匹配包含 X 个 n 的序列的字符串。n{X,}
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。n{X,Y}
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。n$
匹配任何结尾为 n 的字符串。^n
匹配任何开头为 n 的字符串。?=n
匹配任何其后紧接指定字符串 n 的字符串。?!n
匹配任何其后没有紧接指定字符串 n 的字符
RegExp 对象方法
exec
检索字符串中指定的值。返回找到的值,并确定其位置。test
检索字符串中指定的值。返回 true 或 false。toString
返回正则表达式的字符串。
支持正则表达式的 String 对象的方法
search
检索与正则表达式相匹配的值。split
把字符串分割为字符串数组。match(regexp)
检索字符串与正则表达式进行匹配的结果。regexp
一个正则表达式对象或者任何具有 Symbol.match 方法的对象。返回值
一个 Array,其内容取决于是否存在全局(g)标志,如果没有匹配,则返回 null。
replace(pattern, replacement)
返回一个新字符串,其中一个、多个或所有匹配的 pattern 被替换为 replacement。pattern
可以是字符串或者一个带有 Symbol.replace 方法的对象,replacement
可以是字符串或函数。返回值
一个新的字符串,其中一个、多个或所有的匹配项都被指定的替换项替换。
matchAll(regexp)
返回一个迭代器,该迭代器包含了检索字符串与正则表达式进行匹配的所有结果(包括捕获组)。- 同 match,但
regexp
必须 b 含全局g
标志
- 同 match,但
replaceAll(pattern, replacement)
返回一个新字符串,所有匹配 pattern 的部分都被替换为 replacement。- 同 replace
pattern
若为正则对象则必须含全局g
标志
- 同 replace
捕获组
(x)
捕获组:匹配 x 并记住匹配项。
js
"Textfoo,asdasdafoo,foo".match(/(foo)/g); // 失败捕获组, 正常全局匹配
// 输出:['foo', 'foo', 'foo']
"Textfoo,asdasdafoo,foo".match(/(foo)/); // 单个捕获组 [match#1, group#1]
// 输出:['foo', 'foo']
"3[a]2[bc]".match(/\[([^\[\]])\]/); // 单个捕获组
// 输出:['[a]', 'a']
"3[a]2[bc]".match(/\[([^\[\]]+)\]/g) // 失败捕获组, 正常全局匹配
// 输出:['[a]', '[bc]']
[..."3[a]2[bc]".matchAll(/\[([^\[\]]+)\]/g)]; // 全部捕获组
// 输出:[["[a]","a"],["[bc]","bc"]]
"Textfoo,asdasdafoo,foo".match(/(foo)/g); // 失败捕获组, 正常全局匹配
// 输出:['foo', 'foo', 'foo']
"Textfoo,asdasdafoo,foo".match(/(foo)/); // 单个捕获组 [match#1, group#1]
// 输出:['foo', 'foo']
"3[a]2[bc]".match(/\[([^\[\]])\]/); // 单个捕获组
// 输出:['[a]', 'a']
"3[a]2[bc]".match(/\[([^\[\]]+)\]/g) // 失败捕获组, 正常全局匹配
// 输出:['[a]', '[bc]']
[..."3[a]2[bc]".matchAll(/\[([^\[\]]+)\]/g)]; // 全部捕获组
// 输出:[["[a]","a"],["[bc]","bc"]]
使用命名捕获组
js
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";
const capturingRegex = /(?<animal>fox|cat) jumps over/;
const found = paragraph.match(capturingRegex);
console.log(found.groups); // {animal: "fox"}
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";
const capturingRegex = /(?<animal>fox|cat) jumps over/;
const found = paragraph.match(capturingRegex);
console.log(found.groups); // {animal: "fox"}