destacar palavras em html usando regex e javascript - quase lá

Estou escrevendo um plug-in jquery que fará uma pesquisa de localização na página do navegador. Eu preciso melhorar a pesquisa, mas não quero entrar em análise do html ainda.

No momento, minha abordagem é pegar um elemento DOM inteiro e todos os elementos aninhados e simplesmente executar um achado / substituição regex para um determinado termo. Na substituição, vou simplesmente envolver um intervalo em torno do termo correspondente e usar esse intervalo como minha âncora para destacar, rolar, etc.É vital que nenhum caractere dentro de qualquer tag html seja correspondido.

Isso é o mais perto que cheguei:

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

Ele faz um ótimo trabalho ao capturar todos os personagens que estãonão em uma tag html, mas estou tendo problemas para descobrir como inserir meu termo de pesquisa.

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

ATUALIZAR

O seguinte regex faz o que eu quero quando estou testando comhttp://gskinner.com/RegExr/...

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

No entanto, estou tendo problemas para usá-lo no meu javascript. Com o código a seguir, o chrome está me dando o erro "Expressão regular inválida: / (? <= ^ |>) (.?) (Maria) (? =.? </ $) /: Grupo inválido ".

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

Está quebrando no grupo (? <= ^ |>) - isso é algo desajeitado ou uma diferença nos mecanismos do Regex?

ATUALIZAR

A razão pela qual esta regex está quebrando nesse grupo é porque o Javascript não suporta lookbehinds de regex. Para referência e possíveis soluções:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript.

questionAnswers(1)

yourAnswerToTheQuestion