zaznacz słowa w html za pomocą regex i javascript - prawie tam

Piszę wtyczkę jquery, która przeszuka wyszukiwarkę na stronie w stylu przeglądarki. Muszę ulepszyć wyszukiwanie, ale nie chcę jeszcze zbytnio analizować kodu HTML.

W tej chwili moim podejściem jest pobranie całego elementu DOM i wszystkich zagnieżdżonych elementów i po prostu uruchomienie wyrażenia regularnego znajdź / zamień dla danego terminu. W zastępstwie po prostu otworzę zakres wokół dopasowanego terminu i użyję tego zakresu jako kotwicy do podświetlania, przewijania itp.Ważne jest, aby żadne znaki w żadnym znaczniku html nie były dopasowane.

To jest tak blisko, jak dostałem:

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

Robi to bardzo dobrze, przechwytując wszystkie postacie, które sąnie w tagu HTML, ale mam problem z ustaleniem, jak wstawić wyszukiwane hasło.

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

AKTUALIZACJA

Poniższy regex robi to, co chcę podczas testowaniahttp://gskinner.com/RegExr/...

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

Mam jednak pewne problemy z używaniem go w moim javascript. Z następującym kodem chrome wyświetla błąd „Nieprawidłowe wyrażenie regularne: / (? <= ^ |>) (.?) (Mary) (? =.? <| $) /: Nieprawidłowa grupa ”.

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

Łamie się w grupie (? <= ^ |>) - czy jest to coś niezgrabnego lub różnica w silnikach Regex?

AKTUALIZACJA

Powodem, dla którego regex łamie tę grupę, jest to, że Javascript nie obsługuje szukania wyrażeń regularnych. Dla odniesienia i możliwych rozwiązań:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript.

questionAnswers(1)

yourAnswerToTheQuestion