Подстановочный знак RegExp не должен перезаписываться - PullRequest
0 голосов
/ 11 октября 2011

Я нашел здесь полезный пост в StackOverflow, я использую hightlight определенный текст на сайте: Ссылка на ответ

Я опубликую это снова (изменено):

function hiliter(word) {
    var rgxp = new RegExp(word, 'g');
    var repl = '<span class="highlight">' + word + '</span>';
content.innerHTML = content.innerHTML.replace(rgxp, repl);
}

Теперь я попытался использовать это, чтобы найти что-то между < и >

hiliter('&lt;(.*)&gt;');

Это находит правильный раздел, который я хочу выделить, но вывод меняется с , например. <Example> до <(.*)> на странице.

Как выполнить поиск с этим подстановочным знаком, но сохранить HTML-код из поиска с подстановочными знаками при замене?

Заранее спасибо!

1 Ответ

3 голосов
/ 11 октября 2011

Вы можете передать функцию в .replace [MDN] :

function hiliter(word) {
    var rgxp = new RegExp(word, 'g');
    content.innerHTML = content.innerHTML.replace(rgxp, function(match, word) {
         return '<span class="highlight">' + match + '</span>';
    });
}

word будет содержать содержимоепервой группы захвата, а именно то, что соответствует .*, match будет содержать все совпадение, то есть слово, включающее &lt; и &gt;.

Общее примечание: если вы используете innerHTML, вы уничтожите и создадите все элементы HTML.Обработчики событий, связанные через JavaScript, будут уничтожены.

...