正则表达式語法速查表
正则表达式(Regular Expression,簡称 Regex/RegExp)是電腦科學中的一個强力工具,通過定義一种“字符模式”来快速查找、匹配和替换文本。無论是剥离关键資料還是進行表單驗證,掌握它都能让效率呈指數级上升。
| 語法 (Pattern) | 描述 (Description) | 示例 (Example) |
|---|---|---|
| 字符與縮寫类 (Character Classes) | ||
| . | 匹配除换行符以外的任何單個字符。 | a.c 匹配 "abc", "a1c" |
| \w | 匹配任何字母數字字符和下劃线 (`[a-zA-Z0-9_]`)。 | \w+ 匹配 "hello_world" |
| \d | 匹配任意個位數字 (`[0-9]`)。 | \d{4} 匹配 "2026" |
| \s | 匹配任意空白字符(空格、制表符、换行符)。 | \s+ 匹配連串空格 |
| \W, \D, \S | 對應上述縮寫的大寫字母,意為**取反**(如 \D 匹配非數字)。 | \D+ 匹配純英文字串 |
| 锚點與边界 (Anchors & Boundaries) | ||
| ^ | 匹配字符串的開始。如開启 m (多行) 则匹配行首。 | ^Hello |
| $ | 匹配字符串的结束。如開启 m (多行) 则匹配行尾。 | end$ |
| \b | 匹配單詞边界(單詞與非單詞之間的位置)。 | \bword\b 匹配独立單詞word |
| 量詞 (Quantifiers) | ||
| * | 匹配前一個元素 **0 次或多次**。 | a*b 匹配 "b", "ab", "aab" |
| + | 匹配前一個元素 **1 次或多次**。 | a+b 匹配 "ab", "aab" |
| ? | 匹配前一個元素 **0 次或 1 次**(可選)。也用于打破贪婪模式。 | https? 匹配 http 或 https |
| {n,m} | 精確控制匹配次數。匹配最少 n 次,最多 m 次。 | \d{3,5} 匹配 3-5 位數字 |
| 逻辑與分组 (Groups & Logic) | ||
| | | 或 (OR) 逻辑。匹配左边或右边的表达式。 | cat|dog |
| [abc] | 字符集合。匹配在中括號内的任意字符。 | [a-z] 匹配任意小寫字母 |
| [^abc] | 否定字符集合。匹配**不在**中括號内的任意字符。 | [^0-9] 匹配非數字字符 |
| (...) | 捕获组。將多個字符组合為一個單位進行匹配,并將結果提取。 | (abc)+ 匹配 "abcabc" |
| (?:...) | 非捕获组。對字符進行组合,但不在記憶體中儲存该组匹配的内容。 | (?:https) |
原理與常見問題 (FAQ)
1. 这個線上正则表达式工具有隱私安全风险吗?
絕對没有。本工具采用 純前端 JavaScript 實現,这意味著您輸入的正则表达式和所有測試用例文本,完全在您的瀏覽器本地進行解析和匹配。没有任何資料會被上傳到我们的伺服器,您可以安心處理包含密碼、账户、爬虫資料等敏感訊息的字符串。
2. 後缀的 `g`, `i`, `m` 修饰符 (Flags) 是什么意思?
修饰符用于更改正则匹配的預設行為。最常見的三种:
- g (Global 全局匹配):找到所有的匹配项,而不是找到第一個就停止。
- i (Ignore Case 忽略大小寫):匹配時不区分大寫和小寫字母。
- m (Multiline 多行匹配):改变 `^` 和 `$` 的行為,使它们分别匹配每一行的開頭和结尾,而不仅是整個字符串的開頭和结尾。
3. 什么是“捕获组” (Capture Groups)?右侧表格裡為什麼拆分了多個内容?
捕获组通過圆括號 `(...)` 在正则表达式中聲明。它的作用是在一次整段字符串的匹配中,再把特定的子串“單独提取”出来儲存到記憶體中。
例如,模式
(\d{4})-(\d{2})-(\d{2}) 匹配日期 "2026-04-01"。其中总匹配 (Full Match) 是整個日期,但 `Group 1` 將提取出 "2026"(年份),`Group 2` 是 "04"(月份)。我们在侧边栏的 Capture Groups 麵板清楚展示了每個子括號提取到的精準資料,这對提取爬虫结构化訊息极其有用。
4. 為什麼我的模式提示 "Invalid RegExp" 報错?
这通常是因為正则表达式的語法并不合法。例如:括號 `(` 或中括號 `[` 没有闭合,或者出現了無法识别的量詞拼接符號。另外,對于某些特殊字符(如真實的 `+`, `.`, `*`, `?`, `\` 符號),如果您只是想驗證普通文本字符,您必须使用反斜杠 `\` 對其進行轉義(例如:你要匹配網址後缀 ".com",應当编寫為 `\.com`)。如果報错,请對照語法表檢查轉義符號。
5. 測試器支援哪一种正则表达式引擎?
本工具完全基于現代各瀏覽器的 ECMAScript (JavaScript) 原生正则表达式引擎驱动。这意味著您在此處測試通過的表达式,可以直接免修剪地應用于基于 JS / Node.js 的各种前後台程式碼裡。同時 JS 正则引擎也完全兼容并覆盖了主流的 PCRE(Perl 兼容正则),在 Python、Java 等語言中也能高度互通。
6. 什么是“贪婪模式” (Greedy) 和“非贪婪模式” (Lazy)?
正则表达式預設是“贪婪”的,如在使用量詞 `*` 或 `+` 時,它们會尽可能地去匹配**最長的字符串**。例如,對字符串
"abc","def" 使用 ".*",它會直接匹配包含逗號在内的所有内容。
如果在量詞後麵添加一個 ?(例如 .*?),则會切換進入“非贪婪(勉强)模式”,它將匹配到满足條件的**最短字符串**,这樣上述表达式就能按標點符號準確断開了。
7. 左侧文本框為什麼没有超過 2000 次命中?
本工具是一個强悍的計算密集型页麵。当我们通過原生底层逻辑給文本每一环進行重排定位時,無休止的全網页字符命中(例如:利用
. 通配符配對數萬字的小說文本)可能使瀏覽器的性能骤降乃至卡死页麵。基于最佳視覺體感與開發調试的平衡,我们將解析結果列表安全限流到了上限 2000 個 Match。
8. 我该如何用正则匹配純中文字符 (漢字)?
漢字的 Unicode 编碼范围為
\u4e00 (一) 直到 \u9fa5 (龥)。因此,在 JavaScript 环境中抓取文本裡的任何多位純中文字符時,最標準安全的寫法是 [\u4e00-\u9fa5]+。您可以點選上方按钮区域中的快速模板一鍵装填驗證。