0

我需要使用 Java 替换文件中的一些 JavaScript。我正在采取的步骤基本上是这样的:

  1. 读入一个文件(它是一个 .asp 文件,其中包含从另一个系统生成的 JavaScript)
  2. 用我想要的替换不需要的 JavaScript 函数
  3. 将其写回最初生成的文件

我在执行第 2 步时遇到了问题,因为我的代码似乎对 replaceAll 方法感到异常。假设我要替换此方法:

function sayHi() {
    alert('hi');
}

...有这样的事情:

function sayHi() {
    alert("Hello, World!");
}

我的代码如下所示:

private static final String REPLACEMENT_METHOD =
        "function sayHi() {\n" +
        "   alert('Hello, World!');\n" +
        "}";

private static final String METHOD_TO_REPLACE =
        "function sayHi() {\n" +
        "   alert('hi');\n" +
        "}";

String content = // Get the contents from the file...

content = content.replaceAll(METHOD_TO_REPLACE, REPLACEMENT_METHOD);

我遇到的问题是我要替换的字符串被解释为正则表达式(它只是文字文本,但它当然被解释为正则表达式)并且它对我很不利。不幸的是,我无法找到正确的语法来正确转义特殊字符,并且仍然可以让它以我想要的方式匹配。

有任何想法吗?

谢谢!

4

3 回答 3

3

您可以在匹配模式周围使用引号运算符:

private static final String METHOD_TO_REPLACE =
    "\\Q" +
    "function sayHi() {\n" +
    "   alert('hi');\n" +
    "}" +
    "\\E";

顺便一提,

function sayHi() {
    alert("Hello, World!");
}

不会在Java中工作。你可能想要:

void sayHi() {
    alert("Hello, World!");
}
于 2012-10-11T21:25:18.767 回答
1

方法 replaceAll 确实使用第一个参数作为模式。

因此,您有以下解决方案。

  1. 手动转义你的模式。据我所知,你的情况并不太难。
  2. 尝试以编程方式使用Pattern.quote()
  3. String.replace()在循环中使用而不是replaceAll(). 方法replace()适用于纯字符串。
于 2012-10-11T21:28:23.460 回答
0

你试过反斜杠\吗?

于 2012-10-11T21:21:22.870 回答