RegEx用于替换JavaScript模式

时间:2019-05-30 23:08:24

标签: javascript java regex regex-lookarounds regex-group

我有大量的HTML文件,其表达方式如下:

eval('enterData.style.pixelTop=' + y);

我想消除eval表达式,只执行代码,换句话说,将其更改为:

enterData.style.pixelTop =  y;

有人可以帮我吗?我在努力寻求解决方案时伤脑筋,但我只知道如何使用以下方法消除评估:

Regex: eval\('(.*)'\)
Replace: $1

我将Java用于正则表达式。

2 个答案:

答案 0 :(得分:0)

我猜测我们可以使用诸如

这样的表达式分别捕获两个所需的vars
.+'(.+?)'\s+?[+\-*]+\s+([a-z]+).+

我们当然可以简化此表达式,但是我不确定我们可能会有其他输入。

Java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = ".+'(.+?)'\\s+?[+\\-*]+\\s+([a-z]+).+";
final String string = "eval('enterData.style.pixelTop=' + y);\n"
     + "eval('enterData.style.pixelTop=' + x);";
final String subst = "$1$2;";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println(result);

测试

const regex = /.+'(.+?)'\s+?[+\-*]+\s+([a-z]+).+/gm;
const str = `eval('enterData.style.pixelTop=' + y);
eval('enterData.style.pixelTop=' + x);`;
const subst = `$1$2;`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

Demo

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改/更改。

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:0)

我对Java语言一无所知,但这就是我所看到的。

您需要转义'个字符,并使用:?将它们放在不匹配的组中

Regex: eval\(((?:\')(.*)(?:\').*)\)
Replace: $1

签出regex101制作正则表达式原型。