除了遇到数据特定文本时,如何替换分号?

时间:2016-02-22 10:30:23

标签: javascript regex

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

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

但现在我有3个案例,我不想替换分号:

  • 数据:图像/ PNG;
  • 数据:图像/ 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==);

1 个答案:

答案 0 :(得分:1)

[^(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>";
&#13;
&#13;
&#13;

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

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

在回调中,如果设置$1(非空),我们会使用$1恢复捕获的文本,如果没有,我们只需用\n替换,因为我们匹配了& #34;杂散&#34; ;