выделить слова в HTML с помощью регулярных выражений и JavaScript - почти там

Я пишу плагин jquery, который будет выполнять поиск на странице в стиле браузера. Мне нужно улучшить поиск, но я пока не хочу разбирать html.

На данный момент мой подход состоит в том, чтобы взять весь элемент DOM и все вложенные элементы и просто запустить регулярное выражение найти / заменить для данного термина. В замене я просто оберну промежуток вокруг совпадающего термина и буду использовать этот промежуток в качестве своего якоря для выделения, прокрутки и т. Д.It is vital that no characters inside any html tags are matched.

Это так близко, как я получил:

<code>(?<=^|>)([^><].*?)(?=<|$)
</code>

Он делает очень хорошую работу по захвату всех персонажей, которыеnot в теге html, но у меня не получается понять, как вставить свой поисковый запрос.

<code>Input: Any html element (this could be quite large, eg <body>)    
Search Term: 1 or more characters    
Replace Txt: <span class='highlight'>$1</span>
</code>

UPDATE

Следующее регулярное выражение делает то, что я хочу, когда я тестирую сhttp://gskinner.com/RegExr/...

<code>Regex: (?<=^|>)(.*?)(SEARCH_STRING)(?=.*?<|$)
Replacement: $1<span class='highlight'>$2</span>
</code>

Однако у меня возникли проблемы с использованием его в моем JavaScript. С помощью следующего кода Chrome выдает ошибку «Неверное регулярное выражение: / (? & Lt; = ^ | & gt;) (.?)(Mary)(?=.? & lt; | $) /: недействительная группа ".

<code>var origText = $('#'+opt.targetElements).data('origText');
var regx = new RegExp("(?<=^|>)(.*?)(" + $this.val() + ")(?=.*?<|$)", 'gi');
$('#'+opt.targetElements).each(function() {
   var text = origText.replace(regx, '$1<span class="' + opt.resultClass + '">$2</span>');
   $(this).html(text);
});
</code>

Это разбивает группу (? & Lt; = ^ | & gt;) - это что-то неуклюжее или разница в движках Regex?

UPDATE

Причина, по которой это регулярное выражение нарушает эту группу, заключается в том, что Javascript не поддерживает регулярные выражения. Для справки & amp; возможные решения:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript.

Ответы на вопрос(1)

Ваш ответ на вопрос