Skip to content

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标志
  • replaceAll(pattern, replacement) 返回一个新字符串,所有匹配 pattern 的部分都被替换为 replacement。
    • 同 replace pattern 若为正则对象则必须含全局g标志

捕获组

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

参考资料

༼ つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿◕ _◕ ༽つ/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿ ̿̿