首页 > 解决方案 > JavaScript 中使用的正则表达式在 Java 中不起作用

问题描述

replace(/[.?+^$[\]\\(){}|-]/g, '\\$&');

但它在 Java 中不起作用。所以我将代码更改如下。

replace(/[.?+^$[\\]\\\\(){}|-]/g, '\\\\$&');

当我改变它时它不起作用。请帮我 :(

标签: regex

解决方案


在 Java 中,replace在构造函数中不使用正则表达式,因为您需要replaceFirst

但是当您/g在 Javascript 中使用该标志进行所有替换时,您可以使用replaceAll

在 Javascript 中,$&替换中的这部分指向完全匹配。

所以你想替换[.?+^$[\]\\(){}|-]前面的完整匹配(这是这些字符之一)\

在 Java 中,您可以改为使用$0来指代完整匹配。

您还可以转义字符类中的左方括号\\[

例如

System.out.println("{test?test^}".replaceAll("[.?+^$\\[\\]\\\\()\\{}|-]", "\\\\$0"));

查看Java 演示

输出

\{test\?test\^\}

Javascript 中的相同输出

console.log("{test?test^}".replace(/[.?+^$[\]\\(){}|-]/g, '\\$&'));


推荐阅读