1.限定符(出现次数)
?: 0 1 (可有可无)
+: 1 n
*: 0 1 n
{}:指定出现次数
{2} 出现2次
{2,5} 2-5次
{2,} 2次以上
以上是单个字符匹配,多个匹配只需要用()把多个字符包裹起来即可
2.或匹配
|: 同时匹配多个内容
示例:a (dog|pig) ,同时匹配a dog 或者a pig 这两个短语
3.限定内容
[]: 内容只能由[]里的字符组成
示例:[abc],只能由abc三个字母中的任意个组成,[a-z],只能由a-z中的任意字母的任意个数组成
4.取反匹配(在[]中生效)
^: 除后面字符以外的字符
示例:[^0-9], 只能由0-9数字以外的任意字符组成,也就是非数字字符(包含换行符)
5.元字符(预设)
\d:数字字符,等同于[0-9]
\w:单词字符(英文、数字、下划线)
\s:空白符(包含tab和换行符)
大写取反
\D:非数字字符
\W:非单词字符
\S:非空白字符
6.特殊字符
.:英文句号,表示任意字符(换行符除外)
^:只匹配行首
示例:^a,apple √ basic ×
$:只匹配行尾
示例:b$,club √ black ×
7.贪婪匹配与懒惰匹配
示例:匹配html标签 <span><b>abcdef</b></span>
<.+>:会直接匹配一整行,从第一个<到最后一个>,贪婪匹配,匹配尽可能多的内容
<.+?>:加上?后由贪婪匹配改为懒惰匹配,只匹配尽可能少且满足表达式的内容
8.字符边界(全字匹配)
内容:
#00
#aaffbb
#ffffff
#hhggaa
#ffffffff
匹配16进制
表达式1:/#[0-9a-fA-F]{6}/ 匹配内容:#aaffbb #ffffff #ffffffff
表达式2:/\b#[0-9a-fA-F]{6}\b/ 匹配内容:#aaffbb #ffffff
加入\b控制字符边界,只能包含指定数量字符,不能多也不能少(不能截取),相当于vscode中的全字匹配
9.零宽正向肯定前瞻/后瞻
用于指定某些条件必须存在但不包含在匹配结果中,简单来说就是我想匹配内容中包含这一部分但又不需要拿到这一部分
例如,我要qq邮箱号中的qq号,1637891172@qq.com,先这样写:/\b[0-9]{5,13}@qq.com\b/,但是这样会带上邮箱后缀:1637891172@qq.com
使用前瞻写法就可以在匹配qq邮箱的同时去掉后缀:/\b[0-9]{5,13}(?=@qq.com)\b/:1637891172
前瞻:(?=pattern) 写在后面
后瞻:(?<=pattern) 写在前面
const text = "The quick brown fox jumps over the lazy dog.";
// 使用正向肯定前瞻
const lookaheadRegex = /\b\w+(?=[\s.,!?])/g;
console.log(text.match(lookaheadRegex)); // ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy"]
// 使用正向肯定后瞻
const lookbehindRegex = /(?<=\b\w+\s)over\b/g;
console.log(text.match(lookbehindRegex)); // ["over"]
辅助网站
regex-cn.com
regex-vis.com
regex101.com
591

被折叠的 条评论
为什么被折叠?



