用于从样式中删除高度/宽度的Javascript正则表达式

用于从样式中删除高度/宽度的Javascript正则表达式,javascript,regex,Javascript,Regex,使用CKEDITOR中的HTMLFilter addrules,我试图从纯文本样式中删除高度/宽度 它们不返回实际的对象,只是纯文本样式,所以我真的不能使用jQuery或其他DOM操作工具 我有下面的正则表达式代码,它成功地删除了高度和宽度,但仍然保留了实际尺寸 我不熟悉正则表达式,所以我相信它相当简单。只是不确定是什么 多谢各位 var str=“宽度:100px;高度:200px;浮动:左;”; var regex=/(高度|宽度):(?=(.*))/gi; console.log(str

使用CKEDITOR中的HTMLFilter addrules,我试图从纯文本样式中删除高度/宽度

它们不返回实际的对象,只是纯文本样式,所以我真的不能使用jQuery或其他DOM操作工具

我有下面的正则表达式代码,它成功地删除了高度和宽度,但仍然保留了实际尺寸

我不熟悉正则表达式,所以我相信它相当简单。只是不确定是什么

多谢各位

var str=“宽度:100px;高度:200px;浮动:左;”;
var regex=/(高度|宽度):(?=(.*))/gi;

console.log(str.replace(regex)(“”)您还需要捕获值。 用
*?
代替
(?=(.*))
就足够了

var str=“宽度:100px;高度:200px;浮动:左;”;
var regex=/(高度|宽度):*/胃肠道;

console.log(str.replace(regex)(“”)非常接近,您只需要一个额外的组和一些东西来等待,直到其中一个
或单词边界,
\b
。这将获取任何设置,包括
calc
或任何可以遵循的设置,直到
或内联样式的结尾

var str=“宽度:100px;高度:200px;浮动:左;”;
var str2=“宽度:计算(100vh-20px);高度:100%;浮动:左侧;”;
var regex=/((宽度|高度):[\s\s]+?;|\b)/gi;
console.log(str.replace(regex)(“”);

console.log(str2.replace(regex)(“”)您使用了前瞻模式,它是一种非消费模式,即它匹配的文本不会成为整个匹配值的一部分。因此,它不会被移除

使用像这样的模式

/(?:height|width):[^;]*;/gi

详细信息

  • (?:高度|宽度)
    -匹配的
    高度
    宽度
  • -冒号
  • [^;]*
    -除
    之外的匹配0+字符
  • -分号
请参阅JS演示:

var str=“宽度:100px;高度:200px;浮动:左;”;
var regex=/(?:高度|宽度):[^;]*/胃肠道;

console.log(str.replace(regex)(“”)
A非正则表达式解决方案,使用javascript内置方法从纯文本样式中删除高度/宽度

函数isNotWidthHeight(样式){
返回style.toLowerCase().indexOf(“宽度”)==-1&&style.toLowerCase().indexOf(“高度”)==-1&&style;
}
var str=“边距:0自动;宽度:100px;高度:200px;浮动:左;”;
var array=str.split(“;”).filter(isNotWidthHeight);

console.log(array.join(“;”)
(?=(.*))
替换为
*
[^;]*。您使用了前瞻模式,它是一种非消费模式,即它匹配的文本不会成为整个匹配值的一部分。因此,它不会被删除。@WiktorStribiżew如果你加上这个作为回答,我会接受它。您是第一个解决我的问题并描述了原因。请参阅。除非绝对必要,否则您可能希望避免使用“.”运算符。这通常与性能问题有关。在有限的使用范围内,这可能没问题,但通常会有更明确的变通方法@GenericUser
*?
(惰性模式)我看这里没有任何问题。即使你做了
[\s\s]+?
它仍然是一样的。它们相似,但点运算符跳过了
\n
,因此它是不完整的。这更像是一个旁白,因为这个事实在这个线程的问题上没有问题。我的评论更多的是关于避免点运算符的一般做法。我不得不编写一些非常使用正则表达式的应用程序,并且当重写时,使用点运算符的模式在没有这些运算符的情况下通常会表现得更出色—不管这些运算符是否懒惰。