Search code examples
javascriptregexexcept

a regular expression with except word doesn't work


I have the code

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);

I expect to see this

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

But I'll see empty string...

What wrong with my regular expression?


Solution

  • /<img(?:(?!emojione).)*>/gi will match anything between <img and > that doesn't contain the string emojione. Like this:

    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);