2017-02-16 18 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 и >, которое не содержит строку emojione. Как это:

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 «s поддерживается элементы имеют более, чем 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 почему RegExp использование изменить 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

 Смежные вопросы

  • Нет связанных вопросов^_^