人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: kaji0245
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB JavaScript コード テスト 抽出
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GEN111
●35ポイント

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

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

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

JavaScriptの正規表現

◎質問者からの返答

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


2 ● じゃっくそにっく
●35ポイント

正規表現について

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

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

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

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

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

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

正規表現で

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

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

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

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

JavaScriptの正規表現

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

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>
◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ