0

データベース内の特定のコマンドの省略名を入力できるプログラムを作成しようとしています。次のようになります。

ID I(20) AI NN PK, name VC(255), story T

次に、これらが基づいているマップがあります。

    var keys = {
        'PK' : 'PRIMARY KEY',
        'FK' : 'FOREIGN KEY'
    };

    var options = {
        'AI' : 'AUTO_INCREMENT',
        'NN' : 'NOT NULL',
        'D' : 'DEFAULT',
        'CT' : 'CURRENT_TIMESTAMP'
    };

私が抱えている問題は、文字列に存在する短縮名を検索し、それをマップ内の値に置き換えることです。

私が考えることができる唯一の解決策は、正規表現を使用して文字列を探すことです。

私は現在この正規表現を持っています:

(\bI\b|\bAI\b|\bPK\b|\bVC\b|\bT\b|\bNN\b)

これが唯一の方法ですか?上記の正規表現はまだ改善できますか?

4

3 に答える 3

3

単語の境界を交互の外に移動できます

\b(I|AI|PK|VC|T|NN)\b
于 2012-10-18T07:07:48.993 に答える
1

はい。replacejavascript で String のメソッドを使用できます。

疑似コード

newString = oldString.replace(regex, function(match, index){
    // find `replacement` for `match`  
    return replacement;
})
于 2012-10-18T07:07:47.203 に答える
1

私はむしろ分割機能を使用したいと思います。正規表現に何かを追加する必要がある場合、あなたが説明している方法は非常に面倒です。

私は次のようなことをします

var shorthand = {
    "XX":"XXXXXX"
     ...
},
my_string = "ID I(20) AI NN PK, name VC(255), story T",
/* note that you can split using regexp like /\b/ if needed*/
splitted_str = my_string.split(" "),
result_str = "";
for (var i =0; i< splitted_str.length; i++) {
    /*You might want to use a regexp here to grab only the letters and still keep the parameters like the commas, parenthesis, number*/
    result_str += shorthand[splitted_str[i]] +" ";
}
/*And there you go, your request is in result_str.*/

EDIT:カンマなどを保持するための正規表現を含むループ。大文字のみを次のようなものと一致させたい場合は、それを適応させることができることに注意してくださいsplitted_str[i].match(/^([A-Z]+)(.*)$/);

var reResult;
for (var i =0; i< splitted_str.length; i++) {
    reResult = splitted_str[i].match(/^(\w+)(.*)$/);
    result_str += shorthand[reResult[1]] + reResult[2] +" ";
}
于 2012-10-18T07:11:40.490 に答える