: contém para várias palavras

Estou usando o seguinte jQuery

var etag = 'kate'
if (etag.length > 0) {
    $('div').each(function () {
        $(this).find('ul:not(:contains(' + etag + '))').hide();
        $(this).find('ul:contains(' + etag + ')').show();
    });
}​

para o seguinte HTML

<div id="2">
<ul>
  <li>john</li>
  <li>jack</li>
</ul>
<ul>
  <li>kate</li>
  <li>clair</li>
</ul>
<ul>
  <li>hugo</li>
  <li>desmond</li>
</ul>  
<ul>
  <li>said</li>
  <li>jacob</li>
</ul>
  </div>

    <div id="3">
<ul>
  <li>jacob</li>
  <li>me</li>
</ul>
<ul>
  <li>desmond</li>
  <li>george</li>
</ul>
<ul>
  <li>allen</li>
  <li>kate</li>
</ul>  
<ul>
  <li>salkldf</li>
  <li>3kl44</li>
</ul>
</div>

basicamente, desde que etag tenha uma palavra, o código funciona perfeitamente e oculta os elementos que não contêm etag. Meu problema é que, quando etag é várias palavras (e eu não tenho controle sobre ele. É proveniente de um banco de dados e pode ser uma combinação de várias palavras separadas por espaço), o código não funciona.

existe alguma maneira de conseguir isso?

questionAnswers(4)

yourAnswerToTheQuestion