2

結果をハッシュテーブルに配置しながら、正規表現を使用して文字列を分割する方法を見つけようとしています。

例:

var x = "Name: John Doe
Age: 30
Birth Date: 12/12/1981";

var arr = x.split(/Name:|Age:|Birth Date:/);

ただし、文字列を吐き出すことはできますが、値をハッシュなどの便利な形式に保存できないという問題があります。情報の一部が常に表示されるとは限らないためです。

結果を次のようにしたいと思います。

var myHash = {}; // New object
myHash['Name'] = "John Doe";
myHash['Age'] = "30";
myHash['Birth Date'] = "12/12/1981";

これを行う簡単な理由はありますか?

編集: スクリプトは、生成されたレポートからデータを解析するために使用されます。また、この形式には常にキャリッジ リターンがあるとは限りません。すべてを手で入力する代わりに、通知を自動的に生成するために使用されます。

例:

Name: John Doe       Birth Date: 12/12/1981
Age: 30

ただし、例を見た後、正規表現の一致の前に最初にキャリッジリターンまたはその他の特殊文字を追加すると、それができる場合があります。最初に正規表現一致の前に値を追加する方法を理解する必要があります。

4

4 に答える 4

5

2 つの分割を使用して、最初に項目に分割し、次に各項目を分割できます。

var results = {};
var x = "Name: John Doe\nAge: 30\nBirth Date: 12/12/1981";
var pieces = x.split("\n"), part;
for (var i = 0; i < pieces.length; i++) {
    part = pieces[i].split(":");
    results[part[0]] = part[1];
}

作業例: http://jsfiddle.net/jfriend00/kYwq6/

実行内容によっては、結果オブジェクトに配置する前に、各キーと値の先頭と末尾の空白を削除したい場合があります。

于 2012-07-19T06:22:07.257 に答える
1

笑、他のみんなはループに入れました!私は少し挑戦することに決め、簡単なテストを行って、文字列入力をそのまま維持しながら、while または for なしでコーディングする方法を確認しようとしました。

    var x = "Name: John Doe Age: 30 Birth Date: 12/12/1981";

    x = x.replace(/[\t]/g,'');  //replace all tabs returns
    x = x.replace(/[\n\r]/g, '');  //replace all carriage returns
    x = "{" + x.replace("Name:","'Name':'").replace("Age:","','Age':'").replace("Birth","','Birth").replace("Date:","Date':'") + "'}";

    var results =  eval('(' + x + ')');

    var name = trim(results.Name);
    var age = trim(results.Age);
    var bday = trim(results.BirthDate);

ここで行ったことは、x をオブジェクトのキーと値のペアに変換することでした。したがって、次のようになります。

{'Name':' John Doe','Age':' 30','Birth Date':' 12/12/1981'}

次に、results.key を呼び出すだけです。

とにかく、私がこれを投稿する前に、あなたはすでに答えを見つけているようです。

于 2012-07-20T05:16:11.137 に答える
0

入力にキャリッジリターンまたはラインフィードがある場合は、最初にそれで分割し、次にコロンで分割できます。

var x = "Name: John Doe\nAge: 30\nBirth Date: 12/12/1981";

function foo(s) {
  var a = s.split(/\n|\r/);
  var i = a.length;
  var b, obj = {};

  while (i--) {
    b = a[i].split(/\s*:\s*/);
    obj[b[0]] = b[1];
  }
  return obj;
}

var o = foo(x);
alert(o.Name); // John Doe
于 2012-07-19T06:29:35.817 に答える
0

このようなもの:

    var str = "Name: John Doe\nAge: 30\nBirth Date: 12/12/1981"
    var obj = {};
    var parts = str.split(/\n|\r/);
    for( var key in parts ){
      var tmp = parts[key].split(': ');
       obj[tmp[0]] = tmp[1];
    }
    alert(obj.Name)

PS 重複して申し訳ありません - メッセージを削除できません

于 2012-07-20T07:01:23.863 に答える