替换使用javascript继续出现的字符串

替换使用javascript继续出现的字符串,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个字符串,它包含一些重复的属性,我必须用一个匹配项替换这些属性,如下所示: 我有绳子 ".lf-form-container{font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sa

我有一个字符串,它包含一些重复的属性,我必须用一个匹配项替换这些属性,如下所示:

我有绳子

".lf-form-container{font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;background-color:rgb(217,217,217) !important;}"
我想成功

".lf-form-container{font-family:'Helvetica Neue',sans-serif !important;background-color:rgb(217,217,217) !important;}"
通过使用javascript,任何人都可以在这方面帮助我。

试试这个:

var string = ".lf-form-container{font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;background-color:rgb(217,217,217) !important;}",
    declarations = string.match(/\{(.+)\}/)[1];

string = string.replace(declarations, [...new Set(declarations.split(";"))].join(";"));
其工作原理是将字符串围绕分号拆分,通过使用
Set
,过滤生成的数组中的唯一值,然后再次使用分号将其连接起来。请注意,这不是删除重复子字符串的一般解决方案;它只适用于分号分隔的重复项

如果ES6不可用,以下是ES5解决方案:

string = string.replace(declarations, declarations.split(";").filter(function(value, index, self) {
    return self.indexOf(value) === index;
}).join(";"));

结合
考虑所有属性
您可以使用string
.split()
.join()
方法来实现所需的结果

var demo = "font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;font-family:'Helvetica Neue',sans-serif !important;background-color:rgb(217,217,217) !important;"

var res = str_text.split(';').filter(function(item,i,allItems){
                             return i==allItems.indexOf(item);
                     }).join(';');
var demo=“font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;背景色:rgb(217217217217217)!重要;”
var res=demo.split(“;”).filter(函数(item,i,allItems){
返回i==allItems.indexOf(项目);
}).加入(“;”);

console.log(res)
您可以通过
拆分
将此
字符串
设置为
数组
,并删除重复的数组,如下所示:

var string=“font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;背景色:rgb(217217217217217)!重要;”;
var数组=string.split(“;”);
var结果=[];
$.each(数组、函数(i、el){
如果($.INARAY(el,结果)=-1)结果推送(el);
});
控制台日志(结果)
试试这个

var str=“font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;背景色:rgb(217217217217217)!重要;”;
var arrStr=str.split(“;”);
var uniq=arrStr.reduce(函数(a,b){
如果(a.indexOf(b)<0)a.push(b);
返回a;
},[]);

console.log(uniq.join(“;”)您似乎试图只保留属性的第一次出现,因此请尝试这种方法

var input=“font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;font family:'Helvetica Neue',sans serif!重要;背景色:rgb(217217217217217)!重要;”;
函数retainOnlyFirstOccurence(输入){
var-propMap=input.split(“;”).reduce(函数(a,b){
如果(b.length==0),则返回a;
var splitB=b.split(“:”);
如果(a的类型==“对象”){
如果(!a[splitB[0].trim()){
a[splitB[0].trim()]=splitB[1];
}
}否则{
var splitA=a.split(“:”);
var splitb=b.split(“:”);
a={};
如果(!a[splitA[0].trim()])){
a[splitA[0].trim()]=splitA[1];
}
如果(!a[splitB[0].trim()){
a[splitB[0].trim()]=splitB[1];
}
}
返回a;
});
返回Object.keys(propMap).map(function(key){
返回键+”:“+propMap[key];
}).加入(“;”);
};

console.log(retainOnlyFirstOccurence(输入))
.replace()
函数,它是如何生成的?也许你可以防止复制css中的这个字符串,我动态添加到标题中,但我想过滤这个重复。嘿,谢谢你的回复,但我有一个我刚刚编辑过的字符串,你能帮我吗?@FIROZTENNALI你可以先用正则表达式将大括号内的文本去掉,然后在删除重复项后将其重新组合在一起。我编辑了我的答案,以展示如何做到这一点。