2016-04-06 4 views
1

В настоящее время я пишу функцию в Javascript, которая отмечает определенные слова.RegEx соответствует только словам без конкретных слов до и после

У меня есть ящик с кодом <> </code>, в котором я буду писать код JS. Я должен лениться, чтобы установить все теги для выделения синтаксиса самостоятельно, поэтому я хочу иметь функцию, чтобы сделать это для меня.

Пример: < obj> </obj> .functionName(); < - тег obj будет загорать «это» в определенном цвете.

Но если "this" не был помечен и происходит так:

< вкладка> </вкладка>this.functionName();

Я хочу пометить его, но не тег "this".

Вот мой JS код:

function hightLight(text, tag, html) { 
    var taggedText = ("<" + tag + ">" + text + "</" + tag + ">"); 
    var oldHTML = ""; 
    do { 
     oldHTML = html; 
     html = html.replace(text, taggedText); 
    } while(html.localeCompare(oldHTML) != 0);//stop if nothing changed 
    return html; 
} 
+0

Так что если у вас есть ' это this.functionName();', вы хотите, чтобы пометить только первый 'this'? –

+0

Я хочу отметить все «это», которое не было помечено Sebastian

ответ

2

Используйте это регулярное выражение:

/this(?!<\/tab>)/ 

Он использует negative lookahead, чтобы она соответствовала только this, когда она не сопровождается </tab>. Вы можете использовать его как это:

var regex = new RegExp(text + "(?!</" + tag + ">)"); 

и

html = html.replace(regex, taggedText); 
+0

Не уверен, что он этого хочет. –

+0

@AdrienBrunelat Я думаю, что он хочет заменить все вхождения 'this'' этого ', пройдя каждый« этот »по одному. – afuous

+0

О, ладно, я не понял. Тогда это хорошее решение проблемы, хорошо сделано. –

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