我在CKEDITOR中使用HTMLFilter地址,试图从纯文本样式中删除高度/宽度。
他们不会以纯文本样式返回实际对象,所以我真的不能使用jQuery或其他DOM操作工具。
我有下面的正则表达式代码,可以成功删除HEIGHT和WIDTH,但仍然保留实际尺寸。
我是正则表达式的新手,所以我确定它很简单。只是不确定。
谢谢。
var str = "width:100px;height:200px;float:left;";
var regex = /(height|width):(?=(.*?);)/gi;
console.log(str.replace(regex,""));
答案 0 :(得分:1)
您使用了超前模式,这是一种非消耗模式,即,它匹配的文本不会成为整个匹配值的一部分。因此,它不会被删除
使用类似的模式
/(?:height|width):[^;]*;/gi
请参见regex demo。
详细信息
(?:height|width)
-与height
或width
匹配的non-capturing group :
-冒号[^;]*
-匹配;
以外的0+个字符的negated character class ;
-分号。请参阅JS演示
var str = "width:100px;height:200px;float:left;";
var regex = /(?:height|width):[^;]*;/gi;
console.log(str.replace(regex,""));
答案 1 :(得分:1)
具有javascript内置方法的非正则表达式解决方案,用于从纯文本样式中删除height/width
。
function isNotWidthHeight(style) {
return style.toLowerCase().indexOf("width") === -1 && style.toLowerCase().indexOf("height") === -1 && style;
}
var str = "margin:0 auto;width:100px;height:200px;float:left;";
var array = str.split(';').filter(isNotWidthHeight);
console.log(array.join(';'));
答案 2 :(得分:0)
您还需要捕获这些值。
用.*?
代替(?=(.*?);)
就足够了。
var str = "width:100px;height:200px;float:left;";
var regex = /(height|width):.*?;/gi;
console.log(str.replace(regex,""));
答案 3 :(得分:0)
非常接近,您只需要一个额外的组和一些东西即可等待;
或单词边界\b
。这将抢占包括calc
在内的任何设置,或者直到;
或内联样式结束之前可以遵循的任何设置。
var str = "width:100px;height:200px;float:left;";
var str2 = "width:calc(100vh - 20px);height:100%;float:left;";
var regex = /((width|height):[\s\S]+?;|\b)/gi;
console.log(str.replace(regex,""));
console.log(str2.replace(regex,""));