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"}