正则表达式模式
用于搜索和替换文本的模式描述语言,通过组合特殊字符和字面字符来定义字符串模式。
正则表达式模式 (Regular Expression Pattern) 是用于搜索、替换和验证文本的模式描述语言。它将元字符 (特殊字符) 与字面字符组合,定义字符串的匹配模式。起源于 1950 年代数学家 Stephen Kleene 在形式语言理论中提出的概念,如今几乎所有编程语言和文本编辑器都支持正则表达式。
在 JavaScript 中,可以使用字面量语法 /pattern/flags 或构造函数 new RegExp('pattern', 'flags') 创建正则表达式。test() 判断是否匹配,match() 获取匹配结果,replace() 进行替换,split() 进行分割。字面量语法用于模式固定的情况,构造函数用于动态构建模式。搜索蒙眼游戏 (Amazon)涵盖了从基础到高级的内容。
基本元字符包括 . (任意字符)、^ (行首)、$ (行尾) 和 | (或)。标志包括 g (全局搜索)、i (不区分大小写)、m (多行模式)、s (dotAll 模式) 和 u (Unicode 模式),用于控制匹配行为。ES2022 新增的 d 标志可以获取匹配的索引信息。
正则表达式的实际应用范围非常广泛:邮箱和电话号码格式验证、日志文件信息提取、文本编辑器搜索替换、网页抓取数据提取、输入验证等。但需注意,正则表达式不适合解析 HTML 或 JSON 等结构化数据,这些场景应使用专用的解析器。
编写正则表达式时,保持可读性至关重要。复杂的模式可以通过带注释的扩展模式 (部分语言支持) 或将模式拆分为变量来提高可读性。此外,将用户输入直接嵌入正则表达式会产生 ReDoS (正则表达式拒绝服务攻击) 风险,因此输入转义处理是必不可少的。浏览仿真棒 (Amazon)展示了实际应用模式。
在字符计数方面,正则表达式是文本分析的基础技术。它支持统计特定模式的出现次数、计算排除空白和符号后的有效字符数,以及将文本组成元素 (汉字、假名、字母数字) 分类统计。