为什么正则表达式值得学习
一个精心设计的正则表达式可以替代 50 行手动字符串解析代码。它以微秒为单位运行。它几乎适用于所有编程语言。一旦理解了语法,您就可以编写需要数小时才能用条件逻辑实现的模式。
障碍不是概念,而是符号。正则表达式使用密集、符号较多的语法,乍一看像是乱码。一旦你学会阅读它,你就会在代码、数据和文本中看到你以前看不到的模式。
基本模式快速参考
| 图案 | 火柴 | 例子 |
|---|---|---|
\d | 任意数字 0–9 | \d{4} → 2025 |
\w | 字母、数字或下划线 | \w+→“你好世界” |
\s | 任何空白 | \s+→ 一个或多个空格 |
^ / $ | 字符串开始/结束 | ^\d{5}$→ 正好 5 位邮政编码 |
[ABC] | 任意:a、b 或 c | [艾欧]→ 任何元音 |
[^abc] | 除 a、b、c 之外的任何内容 | [^\d]→ 非数字 |
? | 前面的 0 或 1 个 | 颜色→ 颜色或颜色 |
+ | 1个或以上 | \d+→ 一位或多位数字 |
* | 0个或更多 | \d*→ 零个或多个数字 |
{n,m} | n 到 m 次之间 | \d{3,5}→ 3 至 5 位数字 |
值得添加书签的模式
- 电子邮件:
/^[\w.+-]+@[\w-]+\.[a-z]{2,}$/i - 网址提取:
/https?:\/\/[^\s"'<>]+/g - 删除多余的空格:
/\s+/g→ 替换为单个空格 - 提取主题标签:
/#[\w]+/g - 仅匹配整个单词:
/\b字\b/
💡专业提示:使用
克标记查找所有匹配项(不仅仅是第一个匹配项),我用于不区分大小写的匹配,以及米使^和$匹配行边界而不是字符串边界。大多数现实世界的正则表达式模式至少需要克或者我.什么是“灾难性回溯”?
图案如(一+)+应用于长的不匹配字符串会导致指数级处理时间 - 您的正则表达式引擎会陷入尝试指数级更多组合的困境。避免在重叠模式上嵌套量词。图案(a+)+b“aaaaaaaaaaaaaaac”将挂起服务器。
JavaScript 正则表达式与 Python 的工作方式相同吗?
大部分是的,但命名组有所不同(JS 使用(?<名称>),Python使用(?P<名称>))、一些前向/后向功能以及字符类表示法。该测试器使用 JavaScript 的引擎 - 如果行为不同,则用您的目标语言进行测试。