標準のsplitって一つの文字列でしか分割できないみたいなので作ってみました
どういう感じで作るかを考えて、元々のsplitを最初の分割文字列にして、別れた配列それぞれに次の分割文字列でsplitを…と繰り返していく方法が楽そうなんですが(考え方的に簡単で)、無駄な処理があって長い文字列で分割文字列の数も増えてくると速度が落ちそうかなと思って、思いついたのが 分割したい文字列内の分割文字列をある一つに置換してしまって、それでsplitを1回する方法
置換した結果が別の分割文字列と混ざってしまう場合が…
「_aaa_」を「aaa」と「__」で分割すると 「____」に置換されて結果が空白が3つに
分割する文字列が1文字だけじゃない場合はあまり使わないほうがよさそう
結局最初の標準のsplitを順にかけて配列を配列を結合する方法が一番いいということに
これだと分割文字列が2文字以上で一部の場合に問題が…(function(){var orgsplit = String.prototype.split;String.prototype.split = function(arg){if(typeof arg == "object"){var str = this;arg = arg.sort(function(a,b){return b.length-a.length;});for(var i=0;i<arg.length-1;i++){eval('str = str.replace(/'+arg[i]+'/g,"'+arg[arg.length-1]+'")');}return orgsplit.call(str,arg[arg.length-1]);}else{return orgsplit.call(this,arg);}};})();
置換した結果が別の分割文字列と混ざってしまう場合が…
「_aaa_」を「aaa」と「__」で分割すると 「____」に置換されて結果が空白が3つに
分割する文字列が1文字だけじゃない場合はあまり使わないほうがよさそう
結局最初の標準のsplitを順にかけて配列を配列を結合する方法が一番いいということに
(function(){var orgsplit = String.prototype.split;String.prototype.split = function(arg){if(typeof arg == "object"){var ary = orgsplit.call(this,arg[0]);for(var i=1;i<arg.length;i++){for(var j=ary.length-1;j>=0;j--){ary[j] = orgsplit.call(ary[j],arg[i]);Array.prototype.splice.apply(ary,[j,1].concat(ary[j]));}}return ary;}else{return orgsplit.call(this,arg);}};})();
使い方は
"分割したい文字列".split(["分割する文字列1","分割する文字列2","…"]);
"分割したい文字列".split(["分割する文字列1","分割する文字列2","…"]);
と分割する文字列を配列で引数にいれます
普通に文字列を引数にすると標準のsplit関数による分割がされます
普通に文字列を引数にすると標準のsplit関数による分割がされます
コメントする