数量限定符

数量限定符解释
x+1 或多个
x*0 或多个
x?0 或 1 个
x{n}n 个
x{n,}至少 n 个
x{n, m}n 至 m 个, 遵循贪婪原则, 会尽可能匹配多个; 如果在后面加个 ? (如 x{n, m}?), 遵循非贪婪原则

贪婪可以理解成从后往前遍历, 非贪婪可以理解为从前向后遍历

字符限定符

字符限定符解释
\d匹配一个数字字符, [0-9]
\D匹配一个非数字字符, 0-9
\w匹配单词字符(包括数字下划线在内), [0-9A-Za-z_]
\W匹配非单词字符(包括数字下划线在内), 0-9A-Za-z_
\s匹配空白字符(空格、回车、制表符)
\S匹配非空白字符
.匹配除换行符(\n)以外的任何单个字符

根据使用方法可以进行如下分类:

使用解释
[0-9a-zA-Z]范围字符
[abcd]任意字符
[^a-z]范围字符

定位符

定位符解释
^开头标识
$结尾标识
\b单词边界
\B非单词边界

转义符

\: 用于匹配某些特殊字符

/^(\d)\1+$/.test(333), 比如这里的 \1 表示第一个括号里的值, 达到判断重复数字的效果

选择匹配符

|: 可以匹配多个规则

特殊用法

特殊用法解释
?= 正向预查匹配以指定内容结束的字符串
?! 负向预查匹配不是以指定内容结束的字符串
?不把选择匹配符的内容放到缓冲区

正则表达式在 JavaScript 下的使用方法

在 JavaScript 下使用正则表达式, 有两种方法:

第一种方法: 使用 RegExp

提供的方法有: (正则表达式在前面)

  • test(str): 在字符串匹配是否有匹配模式的字符串, 返回 true/false
  • exec: 如果正则表达式中有子表达式, 使用 exec 方法, 返回 result[0] = 匹配结果, result[1] = 子表达式 1 的匹配结果 ……

第二种方法是: 使用 String

提供的方法有: (正则表达式在后面)

  • search 返回匹配模式的字符串出现的位置, 如果没有, 返回 -1;
  • match 返回匹配模式匹配到的字符串, 如果有, 返回数组, 无, 返回 null;
  • replace 将匹配模式匹配到的字符串进行替换;
  • split 将字符串已匹配模式为分隔符进行字符串分隔, 返回数组;

分析

('&ab=').match(/([^&]+)=/g) // ["ab="]

分析: ^ 一般表示开头, 但是注意此处中括号里的 ^ 表示非

i、g、m

  • /i: 忽略大小写
  • /g: 全局
  • /m: 多行查找

update

?<=: now support match from right to left.

可能有用

以下脚本可以在 JavaScript/bash 中,均可运行。

目的为搜索 order_id(区分大小写) 或订单编号。

[oO]{1}[rR]{1}[dD]{1}[eE]{1}[rR]{1}_[iI]{1}[dD]{1}|订单编号

如何搜索某个 API

<Comp[^<]+style=

小心正则中的 lastIndex 陷阱

正则 lastIndex 位数的问题,不同规范版本对边界定义的差异蛮多,在循环中使用正则就非常容易踩坑。

关联文章:

watch-out-for-zero-length-matches:此文中介绍了不同规范中,对 lastIndex 规范边界的差异,在循环场景中书写正则表达式要小心踩坑。