DEVDESK / GUIDES
正则表达式转义与 flags:为什么代码里能匹配,这里不行?
从代码复制正则后,匹配结果变成零,常见原因是把字符串的转义也复制进了模式输入框。把模式本身与承载它的字符串分开,再逐步加 flags。
打开工具:正则表达式测试1. 用两个订单号测试捕获组
在「正则表达式」中填入下面的 Pattern 值,Flags 填 g,待匹配文本使用 Text 值。不要把 Pattern: 或两边的斜杠当作模式的一部分。应匹配两项,捕获组分别为 104 和 205。
Pattern: order-(\d+)
Flags: g
Text: order-104 and order-2052. 字符串需要额外一层转义
模式输入框接收的是正则文本,使用一个反斜杠的 \d。JavaScript 字符串和 JSON 字符串用两个反斜杠来表示它。下面三种写法描述同一个模式,但不能逐字互换到同一个输入框。
Raw pattern: order-(\d+)
JavaScript: new RegExp("order-(\\d+)", "g")
JSON: {"pattern":"order-(\\d+)","flags":"g"}3. 一次只改变一个标志
g 用于继续查找后续匹配,i 忽略大小写。把 Text 中的一项改成 ORDER-205,再加入 i,观察第二项重新出现。m 改变 ^ 和 $ 对行边界的行为;s 让点号也能匹配换行。
m 与 s 解决不同问题,不要因为输入有多行就同时添加。先写下期望匹配的片段,再选择必要的标志。
4. 确认目标语言使用的正则方言
本站使用浏览器的 JavaScript RegExp。某些 PCRE、Python 或其他引擎语法可能不兼容;浏览器支持的语法也可能随版本不同。验证成功后,仍需在真正运行代码的语言和版本中检查。
5. 检查边界样本和耗时
除了两个正确订单号,再测试没有数字、大小写变化、行首行尾和较长的非匹配文本。本站在独立 Worker 中执行,并有超时及匹配数量限制;被截断的结果不表示全文只有这些匹配。
- 输入模式,不要重复添加字符串转义或 / 分隔符。
- 用正例和反例同时检查,不要只看“匹配成功”。
- 在实际运行环境复核语法和性能。