as3 分割に使った文字を残して分割

2011/12/02

下記のような感じで「大文字・小文字混在の文字列」を区切り文字にして分割するんだけど、その分割に使った区切り文字も残したい。

「the achievement The acid THE act the action duck THE activity」を「the achievement」「The acid」「THE act」「the action duck」「THE activity」ってな感じ。

as3に限らず基本的な解決方法の考え方

他に良い方法があるかも…。

  1. 区切り文字に別の区切り文字を追加
  2. 追加した別の区切り文字で分割

さんぷる

細々としたルールは考えない。

  1. private function splitLeaveDelimiter(delimiter:RegExp, str:String, pos:String="before"):Array
  2. {
  3.   var temps:Array = new Array();
  4.   
  5.   if (str.match(delimiter) == null)
  6.   {
  7.     // 区切り文字が存在しないとき。
  8.     temps.push(str);
  9.   }
  10.   else
  11.   {
  12.     // 区切り文字を作成
  13.     var repDlm:String = "";
  14.     var tempDlm:String = "";
  15.     var dlm:String = "<>";
  16.     while (repDlm == "")
  17.     {
  18.       tempDlm = tempDlm + dlm;
  19.       if (str.match(tempDlm) == null)
  20.       {
  21.         repDlm = tempDlm;
  22.       }
  23.     }
  24.     
  25.     // 残したい区切り文字に作成した区切り文字を追加
  26.     var tempStr:String = "";
  27.     if (pos == "before")
  28.     {
  29.       tempStr = str.replace(delimiter, repDlm + "$1");
  30.     }
  31.     else
  32.     {
  33.       tempStr = str.replace(delimiter, "$1" + repDlm);
  34.     }
  35.     
  36.     temps = tempStr.split(repDlm);
  37.   }  
  38.   
  39.   return temps;
  40.   
  41. }
  42.  
  43. var str:Strong = "the achievement The acid THE act the action duck THE activity";
  44. var dlm:RegExp = new RegExp("(the)", "ig");
  45.  
  46. var splitTempFst:Array = splitLeaveDelimiter(dlm, str, "before");

内容としては下記になる。

44行目で「区切り文字」を正規表現にしておく。
※あとで「$1」を使いたいからパターン(?)にしておく。

5行目でまず「区切り文字」が存在するかをチェック。

16行目で、追加する「区切り文字B」を作成。
ココでは「<>」を指定。
もし、「<>」が存在していたら「<><>」を「区切り文字B」にする。以下、同様。

27行目で「区切り文字」に「区切り文字B」を追加する。
※「区切り文字」の前と後ろのどっちで区切るかの指定をしておく。

36行目で「区切り文字B」でsplitする。

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい