javascriptの文字列検索に関する質問です。簡易的なDBを作り、抽出作業の際にonClick="theSearch(0,'テスト')という記述で0列の"テスト"を抽出してくれるのですが"タ行"にて抽出する際のコードを教えていただきたいのですが?タ行から始まる文字列の抽出です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/05/27 12:41:00
  • 終了:2007/05/28 19:48:24

回答(2件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/05/27 13:29:50

ポイント35pt

そのデータベースがどの様にデータを持っているのか分からないので何とも言えませんが……

次のようなコードで参考になるでしょうか。

nations = 'アメリカ,イギリス,タイ,チリ,ツバル,デンマーク,ドイツ,フランス,マダガスカル' ;
splited = nations.split(',') ;
str = '' ;
for (i = 0; i < splited.length; ++i) {
  if (splited[i].match(/^[タ-ド]/)) str += splited[i]+'\n' ;
}
alert(str) ;

JavaScriptの正規表現

id:kaji0245

質問の仕方が悪かったようです、参考にさせていただきながら勉強してまいります。

2007/05/28 19:47:26
id:jack_sonic No.2

じゃっくそにっく回答回数123ベストアンサー獲得回数252007/05/27 15:02:33

ポイント35pt

正規表現について

「タ行からはじまる」など、

柔軟な文字列条件を使うときは、#1で

GEN111様がおっしゃっているように、正規表現を使います

今回の問題についての正規表現の例

記号例 意味
^ 検索対象の"先頭"を意味します
[ ] 文字の種別を指定します
タ-ト タからトまで(タ行)を意味します。
ダ-ド ダからドまで(ダ行)を意味します。

「先頭からタ行ではじまる」は、

正規表現で

"^[タ-トダ-ド]" または "^[タ-ド]"

といった感じになります。

正規表現についての詳細はWebサイトで色々あります。

JavaScript講座 15章 JavaScriptでの正規表現

JavaScriptの正規表現

とほほのJavaScript入門(正規表現)

JavaScriptでのソースの書き方と注意点

今回、質問文で

  • 簡易DBは何で実装するのか(JavaScript orその他)
  • theSearch()が返すデータの形式の詳細
    • レコードごと返すのか、そのフィールドだけ返すのか、
    • 複数マッチしたときにどうするのか

といった点が指定されていないので、とりあえず

  • 簡易DBをJavaScriptで実装
  • レコードごと返す
  • 配列で返す(複数マッチしたときのために)

と仮定してソース例を記述します。

注意点

matcheメソッドを使った

文字列.match(/パターン/)

などの書き方の場合、コードにパターンを直接書くため、

文字列でパターンを渡す(関数のパラメータにしたい)場合に

すこしやりにくいため、

パターン文字列を関数に渡す場合は、

文字列を受け取れるRegExpオブジェクトを使うといいです。

ソースコード例

<script language ="javascript">
// 簡易DBの定義
var datas = new Array();
datas[0] = [ "カスト" , "A", "りんご"];
datas[1] = [ "タスト" , "B", "みかん"];
datas[2] = [ "チスト" , "C", "すいか"];
datas[3] = [ "ツスト" , "D", "じゃがいも"];
datas[4] = [ "テスト" , "E", "肉"];
datas[5] = [ "トスト" , "B", "魚"];
datas[6] = [ "ダスト" , "C", "オレンジ"];
datas[7] = [ "ナスト" , "D", "豚肉"];
datas[8] = [ "ニスト" , "E", "にんじん"];

// 呼び出しテスト
// 簡易DBから、ある列をキーに文字列検索でレコード検索
// ^      :先頭を意味します
// [  ]   :文字の種別を指定します
//  タ-ト :タ行を意味します。
retRecord =  theSearch( 0, "^[タ-トダ-ド]");
// 帰ってきたレコードの件数(retRecord.length)を見て
// あるだけ表示
for ( i= 0; i < retRecord.length; i++)
{
	// レコードを表示
	alert( retRecord[i] );
}

//////////////////////////////////////////
//
// 簡易DBから、ある列をキーに文字列検索でレコード検索する関数
//   rownum : 列番号
//   pattern : 正規表現パターン
//   sOption : オプション ( "i":大文字小文字を区別しない, "g":グローバル)
function theSearch( rownum, pattern, sOption )
{
	// 返すデータ(レコード)の配列
	var aryRet = new Array();
	// 発見した個数
	var nFound=-1;
	// 正規表現オブジェクトの生成
	re = new RegExp();
	// 正規表現をコンパイル(ループで連続判定させる場合に有効)
	re.compile(pattern, sOption);
	
	// rownumで指定された列をキーに検索
	// レコードの数だけ繰り返す
	for( i= 0; i<datas.length; i++)
	{
		// 簡易DBの指定列
		// 一致しているかどうかをテストする
		if( re.test(datas[i][rownum]) )
		{
			// 発見件数+1
			nFound++;
			// 返すデータにレコードを追加
			aryRet[nFound] = datas[i];
			
		}
	}
	// データを返す
	return aryRet;	
}

</script>
id:kaji0245

質問の仕方が悪かったようです、参考にさせていただきながら勉強してまいります。ご回答ありがとうございます。

2007/05/28 19:48:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません