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に限らず基本的な解決方法の考え方
他に良い方法があるかも…。
- 区切り文字に別の区切り文字を追加
- 追加した別の区切り文字で分割
さんぷる
細々としたルールは考えない。
- private function splitLeaveDelimiter(delimiter:RegExp, str:String, pos:String="before"):Array
- {
- var temps:Array = new Array();
- if (str.match(delimiter) == null)
- {
- // 区切り文字が存在しないとき。
- temps.push(str);
- }
- else
- {
- // 区切り文字を作成
- var repDlm:String = "";
- var tempDlm:String = "";
- var dlm:String = "<>";
- while (repDlm == "")
- {
- tempDlm = tempDlm + dlm;
- if (str.match(tempDlm) == null)
- {
- repDlm = tempDlm;
- }
- }
- // 残したい区切り文字に作成した区切り文字を追加
- var tempStr:String = "";
- if (pos == "before")
- {
- tempStr = str.replace(delimiter, repDlm + "$1");
- }
- else
- {
- tempStr = str.replace(delimiter, "$1" + repDlm);
- }
- temps = tempStr.split(repDlm);
- }
- return temps;
- }
- var str:Strong = "the achievement The acid THE act the action duck THE activity";
- var dlm:RegExp = new RegExp("(the)", "ig");
- var splitTempFst:Array = splitLeaveDelimiter(dlm, str, "before");
内容としては下記になる。
44行目で「区切り文字」を正規表現にしておく。
※あとで「$1」を使いたいからパターン(?)にしておく。
※あとで「$1」を使いたいからパターン(?)にしておく。
5行目でまず「区切り文字」が存在するかをチェック。
16行目で、追加する「区切り文字B」を作成。
ココでは「<>」を指定。
もし、「<>」が存在していたら「<><>」を「区切り文字B」にする。以下、同様。
27行目で「区切り文字」に「区切り文字B」を追加する。
※「区切り文字」の前と後ろのどっちで区切るかの指定をしておく。
36行目で「区切り文字B」でsplitする。