最近做一个项目,得到的js,里面的值如下:
var a={依据:' 认定'一级':'一、金额1万 二、不承认',b:'dd'};
这个js直接输出到html中,会报错,因为引号问题,所以需要替换,思路是,查找 :' 开头,直到 '加 ,或者}或者;结尾的单引号,替换为双引号
String s="{依据:' 认定'一级':'一、金额1万 二、不承认',b:'dd'}";
String regex=":( *)\'(.*?)\'(?=[,|}|;])";
s=s.replaceAll(regex, ":$1\"$2\"");
System.out.println(s);
最后改进方案:
private static String replaceIllegalJs(String js){
String regex="(.*?:\')(.*?)(\'[,|}|;])";
Matcher mather=Pattern.compile(regex).matcher(js);
StringBuffer sb=new StringBuffer();
while(mather.find()) {
String tmp=mather.group(2).replaceAll("'", "\\\\\\\\'");
mather.appendReplacement(sb, "$1"+tmp+"$3");
}
mather.appendTail(sb);
return sb.toString();
}