我用换行符替换所有分号,但我必须作一些例外。

results = results.replace(/;/g, "\n");


但是现在我有3种情况不想替换分号:


数据:图像/ PNG;
资料:image / jpeg;
数据:图片/ gif;


基本上任何事情:


数据:图像/ *;


我试过了:

results = results.replace(/^(data:image/png;)|;/g, "\n");


但这是行不通的。

这种工作,但它代替了分号和一个先前的字符:

results = results.replace(/[^(data:image/png;)];/g, "\n");


测试数据:

borderradius:10;borderradius:20;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQUAAAGQCAYAAACnPXVhAAAz9ElEQVR4Ae2d2a8VxdqH+QO44YaECxISQ0IICSGEEAghEoKBQEEbfXUX7JizwEBUFBUJAGPA0IChKEJwh59uR59rjrLIACO/pTGUgD0gAa+D+0cw+oAw0jjQAAAABJRU5ErkJggg==);

最佳答案

[^(data:image/png;)];包含一个常见的用户错误:字符类(单个字符匹配模式)用于分组构造(序列)
匹配模式)。有关类似问题,请参见Regex expression not working with once or none

您可以使用正则表达式捕获data:image/[something];,然后使用回调来决定是保留捕获还是将;替换为换行符:



var s = "data:image/png; data/png; text";
var res = s.replace(/\b(data:image\/[^\/;]*;)|;/g, function (_, $1) {
    return $1 ? $1 : "\n";
  });
document.body.innerHTML = "<pre>" + res + "</pre>";





/\b(data:image\/[^\/;]*;)|;/g将匹配以下情况的多次出现:


\b(data:image\/[^\/;]*;)-组1捕获整个单词data:image,后跟/,然后是零个或多个除/;以外的字符,直到第一个;
|-或
;-文字分号(仅匹配,此处未使用捕获组)


在回调中,如果设置了$1(不为null),我们将使用$1恢复捕获的文本,如果未设置,则我们将其替换为\n,因为我们匹配了“杂散” ;

07-24 09:50
查看更多