テキストデータから文字列を取り出したい

http://okwave.jp/qa/q9172829.html

正規表現は関数の外に展開したほうがよかったな。
そもそも取り出すテキストの中に同じキーワードがあるならば破たんするか。
製作時間60分を目標としていたのに、超えてしまった。


5日間も休んでいた筋トレを再開した。体が心地よいだるさだ。

<!DOCTYPE html>
<meta charset="utf-8">
<title>高機能なエディタなら…</title>
<style >
</style>

<body>
<textarea rows="15" cols="90" id="A">
--------
AUTHOR: hogehoge
TITLE: 記事A
STATUS: Publish
ALLOW COMMENTS: 0
CONVERT BREAKS: __default__
ALLOW PINGS: 0
PRIMARY CATEGORY: news
CATEGORY: news

DATE: 02/08/2014 06:17:55 AM
-----
BODY:
記事一個目。
ほげほげ
-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


--------
AUTHOR: hogehoge
TITLE: 記事B
STATUS: Publish
ALLOW COMMENTS: 0
CONVERT BREAKS: __default__
ALLOW PINGS: 0
PRIMARY CATEGORY: nikki
CATEGORY: nikki

DATE: 02/09/2014 07:45:04 PM
-----
BODY:
記事2個目。
<img src="hoge.jpg">
ほげほげ
-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----


--------
AUTHOR: hogehoge
TITLE: 記事C
STATUS: Publish
ALLOW COMMENTS: 0
CONVERT BREAKS: __default__
ALLOW PINGS: 0
PRIMARY CATEGORY: news
CATEGORY: news

DATE: 02/09/2014 07:51:34 PM
-----
BODY:
記事3個目。ほげほげ
-----
EXTENDED BODY:

-----
EXCERPT:

-----
KEYWORDS:

-----
</textarea><br>
<input type="button" value="conv" onclick="hoge();">
<hr>
<textarea rows="15" cols="90" id="B">
</textarea>

<script>
function addDQ (str) {
  return '"' + str + '"';
}

function hoge () {
  var t = document.querySelector ('#A').value;
  var b = document.querySelector ('#B');
  var rst = [];
  var rec = [];
  
  var cr = '\\r|\\n|\\r\\n';
  var CR = '(?:' + cr + ')*';
  
  var sp = '\\s?';
  var splt8 = '\\-{8}' + CR;
  var splt5 = '\\-{5}' + CR;
  var typeA = sp + '.*?' + CR;
  var typeB = sp + '(.*?)' + CR;
  var typeC = sp + '((?:.|' + cr + ')*?)' + CR;
  var typeE = sp + '(?:.|' + cr + ')*?' + CR;
  
  var pattern = [
    splt8,
    'AUTHOR:' + typeA,
    'TITLE:' + typeB,
    'STATUS:' + typeA,
    'ALLOW COMMENTS:' + typeA,
    'CONVERT BREAKS:' + typeA,
    'ALLOW PINGS:' + typeA,
    'PRIMARY CATEGORY:' + typeA,
    'CATEGORY:' + typeB,
    'DATE:' + typeB + splt5,
    'BODY:' + CR + typeC + splt5,
    'EXTENDED BODY:' + CR + typeE + splt5,
    'EXCERPT:' + CR + typeE + splt5,
    'KEYWORDS:' + CR + typeE + splt5,
    typeE
  ].join ('');

  var reg = new RegExp (pattern, 'g');
  
  for (rec = []; rec = reg.exec (t); ) {
    rec.shift ();
    rst.push (rec);
  }
  
  b.value = rst.map (function (a) {
    a[3] = a[3].replace (/(\r|\n|\r\n)/g, '<br>');
    return a.map (addDQ).join(', ');
  }).join ('\n');
  
}

</script>