正则表达式学习笔记 02:基础语法

正则表达式是一种描述字符规则的迷你语言,它由普通字符和元字符组成。

普通字符

没有显式指定为元字符的所有可打印和不可打印字符,包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

javascript 复制代码
const str = 'abcderfgearshdf';
const regex = /fgea/;

console.log(regex.test(str));      // true
console.log(str.match(regex));     // ['fgea', index: 6, input: 'abcderfgearshdf', groups: undefined] 测试浏览器 Chrome 157.0.8103.39
console.log(str.match(regex)[0]);  // 'fgea'

元字符

正则表达式中的元字符是具有特殊含义的字符,它们不表示字面意义,而是用于控制匹配模式。

功能分类 元字符/语法 含义与示例
任意字符匹配 . 匹配除换行外任意一个字符;是否匹配换行受 s/DOTALL 影响
字符类 [...] 字符集合,如 [abc] 匹配 a/b/c
[^...] 否定字符类,如 [^0-9] 匹配非数字
- 在字符类中表示范围,如 [a-z];放首尾或转义可表示字面量
预定义字符类 \d / \D 数字 / 非数字
\w / \W 单词字符 / 非单词字符
\s / \S 空白字符 / 非空白字符
\p{...} / \P{...} Unicode 属性类 / 其否定,如 \p{L} 字母
量词/重复 * 0 次或多次
+ 1 次或多次
? 0 次或 1 次
{m} 恰好 m 次
{m,} 至少 m 次
{m,n} m 到 n 次
懒惰/贪婪/占有量词 *?、+?、??、{m,n}? 懒惰匹配,尽量少
*+、++、?+、{m,n}+ 占有量词,不回溯(部分引擎支持)
位置锚点 ^ 行/字符串开头,取决于多行模式
$ 行/字符串结尾,取决于多行模式
\b / \B 单词边界 / 非单词边界
\A 字符串开头(部分引擎)
\Z / \z 字符串结尾/最终结尾(引擎差异)
\G 上一次匹配结束位置(部分引擎)
选择/分支 ` `
分组 (...) 捕获分组
(?:...) 非捕获分组
(?<name>...) 或 (?P<name>...) 命名捕获分组,语法因引擎而异
(?>...) 原子分组,禁止回溯(部分引擎)
环视/断言 (?=...) 正向先行断言
(?!...) 负向先行断言
(?<=...) 正向后行断言
(?<!...) 负向后行断言
反向引用 \1、\2... 引用第 n 个捕获组
\k<name> 引用命名捕获组,语法因引擎而异
转义 \ 转义元字符,如 \. 匹配字面点号
\Q...\E 引号内按字面量处理(部分引擎)
内联模式修饰 (?i)、(?m)、(?s) 等 开启/关闭忽略大小写、多行、点匹配换行等(非严格"元字符")

注意: 若需要使用元字符字面量匹配,必须使用转移字符处理,否则无法匹配

javascript 复制代码
const a = "3.1415";
const regex = /./;
console.log(a.match(regex)); // ['3', index: 0, input: '3.1415', groups: undefined]

const regex2 = /\./;
console.log(a.match(regex2)); // ['.', index: 1, input: '3.1415', groups: undefined]
相关推荐
wangqiaowq3 小时前
Ontology 学习 二
学习
该学习了咕咕10 小时前
顶刊论文学习笔记
学习
希和202711 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
Linux-lucky11 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
li星野11 小时前
【学习记录】k-Wave 时间步长、CFL 稳定性与参数实验全解析
学习
一个人旅程~14 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫14 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
派大猩猩_16 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
Nerd(BUG版)17 小时前
Flutter学习day5--事件手势与命中测试
学习·flutter