Skip to content

正则表达式

正则基础

直接值

任意直接值,例如 /abc/, /你好/

量词:*, ?, +, {n}, {n,}, {n,m}

量词含义示例等价于
{n} / {n,} / {n,m}匹配前面子表达式 n 次、至少 n 次、nm'o{2}' 匹配 "food" 中两个 o,但不能匹配 "Bob" 中一个 o——
*零次或多次zo* 可匹配 "z", "zoo"{0,}
?零次或一次do(es)? 匹配 "do" 或 "does"{0,1}
+一次或多次zo+ 匹配 "zo", "zoo",但不能匹配 "z"{1,}

位置锚点:^, $, \b, \B

锚点含义
^开头锚点
$尾位置锚点
\b, \B单词边界 / 非单词边界
\b:匹配单词边界(空格、标点、换行等)
\B:非单词边界

元字符:\w, \W, \d, \D, \s, \S

符号含义
\s匹配空白字符(空格、制表符、换行等)
\S匹配非空白字符
\w匹配单词字符(字母、数字、下划线)≈ [A-Za-z0-9_]
\W匹配非单词字符
\d匹配数字 ≈ [0-9]
\D匹配非数字
\b单词边界
\B非单词边界

分组与逻辑

() 分组

符号功能
()分组,用于捕获或组合模式,例如 (y | ies) 表示“y”或“ies”

字符集合 []

语法含义
[xyz]匹配其中任一字符
[^xyz]匹配不在集合中的字符
[a-z]匹配 a 到 z 的任意小写字母
[A-Z]匹配 A 到 Z 的任意大写字母
[a-zA-Z]匹配任意字母
[0-9]匹配任意数字
[0-9a-zA-Z_]匹配任意字母、数字、下划线

或运算 |

| 或运算,匹配左右任意一个表达式

修饰符

i g常用

修饰符含义
i忽略大小写
g全局匹配,查找所有匹配而非第一个

构造方式

/pattern/

js
let reg1 = /abc/i; // 匹配 "abc",忽略大小写
let reg2 = /[abc]/gi; // 匹配 a、b、c 中任意一个,全局且忽略大小写

RegExp

js
new RegExp("abc", "ig"); // 等价于 /abc/ig
new RegExp("[abc]", "ig");

应用方法

test(), exec() —— 正则对象方法

方法功能
regExp.test(str)测试字符串是否匹配,返回 true/false
regExp.exec(str)执行匹配,返回匹配结果数组(含分组),无匹配则返回 null

字符串匹配

方法功能
str.replace(reg, replacement)替换匹配部分
str.split(reg)按正则分割字符串
str.search(reg)查找首次匹配的位置,返回索引,未找到返回 -1
str.match(reg)找到所有匹配项,返回数组(全局模式下)

断言(很少使用,略)

断言说明示例
(?=pattern)正向肯定预查(lookahead)
在当前位置之后必须匹配 pattern,但不包含它
"Windows(?=95|98|NT|2000)" 匹配 "Windows" 后跟指定版本
(?!pattern)正向否定预查(negative lookahead)
后边不能出现 pattern
"Windows(?!2000)" 匹配 "Windows" 但排除 "Windows2000"
(?<=pattern)反向肯定预查(lookbehind)
前边必须是 pattern
(?<=3\.1)Windows 匹配 "3.1Windows" 中的 Windows
(?<!pattern)反向否定预查(negative lookbehind)
前边不能是 pattern
(?<!3\.1)Windows 不匹配 "3.1Windows" 中的 Windows

Released under the MIT License.