2017-02-16 13 views
-1

我的代码除了字正则表达式与不工作

let dirtyHtml = `<img class="emojione" src=""> 
 
<img class="a" src="edw"> 
 
<img class="emojione" src="" /> 
 
<img class="emojione" src=""/> 
 

 
<img src="">`; 
 

 
let clearHtml = dirtyHtml.replace(/<img[^<>]+(?!emojione)[^<>]+>/gi, ''); 
 

 
console.log(clearHtml);

我希望看到这个

<img class="emojione" src=""> 
<img class="emojione" src="" /> 
<img class="emojione" src=""/> 

但我会看空字符串。 ..

我的正则表达式有什么问题?

+0

你在开玩笑吗? ))) – constantant

+0

这会做得更好:'clearHtml = dirtyHtml.replace(/ ))*>/gi,'');' - 但是当他们说用正则表达式解析HTML并不是最好的解决方案时听取其他人的意见! – ridgerunner

+0

@ridgerunner哪一种更好的解决方案我必须选择?使用DOM接口? – constantant

回答

2

/<img(?:(?!emojione).)*>/gi将匹配<img>之间不包含字符串的任何内容。就像这样:

let dirtyHtml = `<img class="emojione" src=""> 
 
<img class="a" src="edw"> 
 
<img class="emojione" src="" /> 
 
<img class="emojione" src=""/> 
 

 
<img src="">`; 
 

 
let clearHtml = dirtyHtml.replace(/<img(?:(?!emojione).)*>/gi, ''); 
 

 
console.log(clearHtml);

+0

不错!如果我想匹配包含字符串emojione的之间的任何内容,该怎么办? – rick

+0

sry明白了/ /gi – rick

+0

@rick使用这个'/ ] *(?: emojione)[^>] *>/gi'。 –

0

你可以试试这个(不要紧img[a-z]{3}因为src的是否支持的元素有超过3个字符http://www.w3resource.com/html/attributes/html-src-attribute.php但它更容易编写img

let dirtyHtml = `<img class="emojione" src=""> 
 
<img class="a" src="edw"> 
 
<img class="emojione" src="" /> 
 
<img class="emojione" src=""/> 
 

 
<img src="">`; 
 

 
let clearHtml = dirtyHtml.replace(/(<img class="[a-z]?" src="[a-z]+">)|(<img src="">)/gi, ''); 
 

 
console.log(clearHtml);

0

我就不重复了很多reasons为什么使用正则表达式来修改HTML是一个糟糕的主意(并且被许多人认为是一个黑客),但我想说明如何自然也可能是使用jQuery这个任务

let dirtyHtml = `<img class="emojione" src=""> 
 
<img class="a" src="edw"> 
 
<img class="emojione" src="" /> 
 
<img class="emojione" src=""/> 
 

 
<img src="">`; 
 

 
// Put your html string within some HTML element to make a starting point 
 
var $wrap = $('<div/>').append(dirtyHtml); 
 
// Remove image tags without specific class 
 
$wrap.find('img:not(.emojione)').remove(); 
 

 
console.log($wrap.html())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
+0

请重复这个没有jQuery的解决方案 – constantant