piapia123
zh

正则表达式代码生成

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

填一个正则表达式,选目标语言,右边给出匹配、提取全部、替换、只判断四种可用的代码片段。 这个工具真正要讲的是「反斜杠要写几个」。 同一个 `\d+` 放进不同语言的字符串里,写的反斜杠数量不一样,而写错了不会报错: · JavaScript 里 `"\d"` 等于 `"d"` —— 字符串中的无效转义会被静默丢掉,你的正则悄悄变成了 `d`,匹配不上任何东西却没有任何提示。要么写 `"\\d"`,要么用正则字面量 `/…/`。 · Python 用原始字符串 `r"…"` 就不用加倍;写成普通字符串现在会触发 DeprecationWarning。 · Java / C# 的双引号字符串里反斜杠是转义字符,必须写 `\\d`。 · PHP 的单引号字符串里只有 `\\` 与 `\'` 是转义,所以 `'/\d/'` 是对的 —— 这里加倍反而错。 · Go 用反引号原始字符串,同样不用加倍。 ⚠️ 语法错的正则当场报错,而不是生成一堆跑不起来的代码 —— 那种错误放到用户的项目里,报错信息远不如这里说清楚。 ⚠️ 替换串里的 `$1` / `\1` 是分组引用,各语言写法不同(Python 是 `\1`,其余多为 `$1`),结果里有一行专门说明。

功能

  • 六种语言:JavaScript、Python、Java、Go、PHP、C#
  • ⚠️ 每种语言给出该语言里正确的转义,而不是把同一个字符串套一遍
  • 四种片段:匹配、提取全部、替换、只判断是否匹配
  • 片段是完整可跑的形态(带 import / using 与变量声明),不是一句裸表达式
  • 标志会翻译成各语言自己的写法(`re.IGNORECASE`、`Pattern.CASE_INSENSITIVE`、`RegexOptions.IgnoreCase`)
  • ⚠️ 语法错的正则当场报错,不生成跑不起来的代码
  • 结果里的代码不随界面语言变(代码就是代码)
  • 全部本机计算

使用方法

  1. 填一个正则表达式(不含两边的斜杠)
  2. 选目标语言,按需要填标志与替换文本
  3. 右边给出那个语言的四种写法
  4. 复制走之前留意「字符串里要写」那一行 —— 那是最容易错的地方

常见问题

为什么 JavaScript 里 "\d" 不管用?
因为字符串里的无效转义会被静默丢掉:`"\d"` 在 JS 里就是 `"d"`,你的正则变成了匹配字母 d。这是这类错误里最难查的一种 —— 不报错、不警告,只是匹配不上。两个办法:写 `"\\d"`(反斜杠加倍),或者直接用正则字面量 `/\d/`(字面量里不用加倍,本工具的 JavaScript 片段用的就是它)。Java、C# 的双引号字符串同理,只是它们会编译报错,反而安全一些。
为什么 PHP 的单引号里不用加倍?
因为PHP 单引号字符串里只有 `\\` 和 `\'` 是转义序列,其余反斜杠原样保留 —— 所以 `'/\d/'` 里的 `\d` 就是给正则看的。而 PHP 的双引号字符串会把 `\d` 当转义(虽然结果也是 d,但会发一个警告),所以那种写法里要加倍。同一个语言里两种引号规则不同,这也是本工具分语言给写法的原因。
这些片段能直接粘进项目吗?
能,片段都是完整可跑的形态:带 `import` / `using`、带变量声明。有几处需要你按实际情况改:变量名(`text` 是你自己的字符串)、以及替换串里的分组引用写法(Python 用 `\1`,Go 用 `$1` 或更安全的 `${1}`,其余多为 `$1`)。另外标志只翻译了各语言通用那几个(i / m / s),`g` 这类是 JavaScript 专有的概念,在别的语言里对应的是「要不要循环取全部匹配」这件事 —— 所以提取全部那个片段在 Java 里是 `while (matcher.find())`;`y`(粘性匹配)更是只有 JavaScript 有,选了它会在结果里注明「已忽略」。

相关工具