首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了遇到数据uri特定的文本外,如何替换分号?

除了遇到数据uri特定的文本外,如何替换分号?
EN

Stack Overflow用户
提问于 2016-02-22 10:30:22
回答 1查看 71关注 0票数 2

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

代码语言:javascript
复制
results = results.replace(/;/g, "\n");

但是现在我有三个例子不想替换分号:

  • 资料来源:image/png;
  • 资料:图像/jpeg;
  • 资料来源:image/gif;

基本上,任何东西:

  • 资料:图像/*;

我试过:

代码语言:javascript
复制
results = results.replace(/^(data:image/png;)|;/g, "\n");

但不起作用。

这类作品,但它取代了分号和前面的字符:

代码语言:javascript
复制
results = results.replace(/[^(data:image/png;)];/g, "\n");

测试数据:

代码语言:javascript
复制
borderradius:10;borderradius:20;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQUAAAGQCAYAAACnPXVhAAAz9ElEQVR4Ae2d2a8VxdqH+QO44YaECxISQ0IICSGEEAghEoKBQEEbfXUX7JizwEBUFBUJAGPA0IChKEJwh59uR59rjrLIACO/pTGUgD0gAa+D+0cw+oAw0jjQAAAABJRU5ErkJggg==);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 10:37:43

[^(data:image/png;)];包含一个常见的用户错误:在要使用分组构造(序列匹配模式)的地方使用字符类(单字符匹配模式)。类似的问题请参见https://stackoverflow.com/questions/34765780/regex-expression-not-working-with-once-or-none/34766090#34766090

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

代码语言:javascript
复制
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替换,因为我们匹配了一个“杂散”的;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35551297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档