JavaScript の動作でわからないところがあります。どの辺りを修正すれば良いか、ご教示いただけないでしょうか?

 


setModelDeclaration("model(parentModel)") を実行すると。
class Port(model)(true): と出力されます。

期待する出力は、
class Port(model): となります。
 


定義した関数
function setModelDeclaration(sheetName){
sheetName=String(sheetName);
parentModelName=/(.*)/.test(sheetName);
var modelName="";

if(parentModelName.length!=0){
modelName = sheetName.slice(0,sheetName.indexOf("("));
modelDeclaration = "class "+sheetName+"("+parentModelName+"):";

}else{
modelName = sheetName;
modelDeclaration = "class "+modelName+"(models.Model):";

}
return modelDeclaration;

}

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2014/06/09 14:35:36
  • 終了:2014/06/10 05:26:54

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4363ベストアンサー獲得回数18002014/06/09 15:56:43

ポイント300pt

こんな感じのことをやりたいのでしょうか?

function  setModelDeclaration(sheetName) {
    sheetName = String(sheetName);
//  RegExp.test() の戻り値は true / false
//  parentModelName = /(.*)/.test(sheetName);
    var parentModelName;
    var re = /\((.*)\)/;    // () の内側を切り出す正規表現
    var result;
    if ((result = re.exec(sheetName)) != null) {
        parentModelName = result[1];
    }

    if(parentModelName){
        modelName = sheetName.slice(0,sheetName.indexOf("("));
//                                  *****  sheet じゃなくて model ?
//      modelDeclaration = "class "+sheetName+"("+parentModelName+"):";
        modelDeclaration = "class "+modelName+"("+parentModelName+"):";
    } else {
        ...
    }
    return modelDeclaration;
}

元のコードになるべく残して、書き換えたところは、元のコードを残してあります。

ポイントは、こんなところかと。

  • 正規表現で () は、特別な意味を持つ
  • RegExp.test() メソッドの戻り値は true / false
  • modelDeclaration を作るときのタイプミス?

メソッドの引数や戻り値の意味は、ドキュメントを引くようにした方が良いです。

id:domodomodomo

ご回答いただき、誠にありがとうございます。
ドキュメントの引き方まで教えていただき、幸甚でございます。

JavaScript 自体、まだ触りだしたばかりなので、大変苦慮しておりました。
ご教示いただき、ありがとうございます。

2014/06/09 16:28:43

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

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

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

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

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