2009-06-11 27 views
0

私はコンボボックスと入力ボックスを持っています。入力ボックスに任意の文字を入力すると、単語または文のリストがリストに含まれていることを前提に、その文字と一致するすべての単語または文がコンボボックスに表示されます。Javascriptの正規表現パターン

ex1:) input box: a 
     combo box : America 
        Australia 
        joy is in Austria 

この例では、JavaScriptの正規表現パターンが必要です。誰も私に示唆を与える。

答えて

2

わからない、あなただけのjQueryたい

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script> 
     $j = jQuery.noConflict(); 

     $j(document).ready(init); 

     function init() 
     { 
      $j('#MyEditBox').change(filterCombo).keyup(filterCombo); 
     } 

     function filterCombo() 
     { 
      var InputText = $j(this).val(); 
      $j('#MyCombo option:not(:contains('+ InputText +'))').hide(); 
      $j('#MyCombo option:contains('+ InputText +')').show(); 
     } 
    </script> 
</head> 
<body> 
    <input type="text" id="MyEditBox" /> 
    <select multiple id="MyCombo"> 
     <option>America 
     <option>Australia 
     <option>Something else 
     <option>Joy is in Austria 
     <option>Wibble 
    </select> 
</html> 


更新:これは完全な単語にのみ一致します:

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script> 
     $j = jQuery.noConflict(); 


     $j(document).ready(init); 


     function init() 
     { 
      $j('#MyEditBox').change(filterCombo).keyup(filterCombo); 
     } 


     function filterCombo() 
     { 
      var InputText = $j(this).val(); 

      if (InputText.length > 0) 
      { 
       $j('#MyCombo option') 
        .hide() 
        .filter(function() { return hasWholeWord($j(this).val() , InputText) }) 
        .show() 
        ; 
      } 
      else 
      { 
       $j('#MyCombo option').show(); 
      } 
     } 


     function hasWholeWord(Text , Word) 
     { 
      return (new RegExp('\\b'+Word+'\\b','i').test(Text)); 
     } 
    </script> 
</head> 
<body> 
    <input type="text" id="MyEditBox" value="" /> 
    <select multiple id="MyCombo"> 
     <option>America 
     <option>Australia 
     <option>Something else 
     <option>Joy is in Austria 
     <option>Wibble 
    </select> 
</html> 
+1

なぜこれが否定的な投票をしたのですか? これは私にとって有効な解決策のようです – ErsatzRyan

+0

filterCombo()ここではdeclare.iはready関数またはoutsideの中にあることを意味します – usman

+1

「行の中の何か」のとおり、一般的な例として意図されていました。正確なコピー貼り付けの例しかし、とにかく私はready/init関数を追加しました。 –

0

入力時に単語の境界に単語を入れます。下の[単語]の部分をテキストボックスからの入力と置き換えてください。

式は次のようになります。

\b[word here]\b 

はまた、ここで良いregex testerです。このよう

::私はまさにあなたが求めているものを理解し、私はあなたが正規表現をしたくないと思う

0

私はそれがあなたがマッチしたいところに少し依存すると思います。あなたの例では、文字「a」は「アメリカ」の始まりと終わりの両方で一致します、それは十分な一致ですか?

あなたは許容試合はどこから来るのか試してみて、制限するために「\ B」オプションを使用することもできますから、あなたが一致させたい場所に応じてjLinq (Disclaimer: My project :))

を使用することができ、あなたのデータをフィルタリングする方法に応じてBA \ ...

- マッチ '' 開始

から\ bの - 試合 '' 端から

また、試合の価値に興味があれば、次のようなものを使うことができます。

(? < 1> \ ba \ w +) - 読むのが少し難しいですが、これは 'a'で始まるものと一致しますが、マッチ内のグループとして単語全体を返します。

+0

は申し訳ありませんが、(BAの\ Wは+ \?<1>)を教えてください? – usman

+0

... str.match(/(?<1> \ ba \ w +)/ gi)の行に沿って何かを繰り返して、保持したい値を決定します。それが意味をなさない場合は私に知らせて、私は答えにさらに投稿するよ – Hugoware

+0

うん、これは私の答えよりもうまく動作します。また、大文字のAではなく、小文字のAにのみ一致すると思われますので、.ToUpper()やJavascriptで使用されているものを使用して(?<1> \ bA \ w +)に一致させたい場合があります。 – ryanulit

0

単純な部分文字列の一致の場合、正規表現は必要ありません。ただ普通のmyString.indexOf(inputString)で十分です。大文字と小文字を区別しない場合は、myString.toUpperCase().indexOf(inputString.toUpperCase())を使用できます。