2016-04-07 5 views
2

その後、大きければ2つのチルダ文字の間にチルダを追加します。2つのチルダ間の文字カウントは、私はチルダ(〜)を経由して、JavaScriptでのすべての60個の文字を分割したいテキストの文字列を持っている60

私は持っています。

UXXXXXXquXXX pXXXtXXXXXXXXXt ID:〜XXXTEST COPYXXX〜XXXGXXXstrosXXXopy RXXXportXXX〜NXXXXXXXXX:XXXDELTAXXX、DXXXXXXsy〜CXXXsXXX XXXotXXX XXXo:XXX999999999XXX〜45678:XXXXXX〜DXXXtXXX oXXX XXXXXXrtXXX:XXX18 \ 12 \ 1968XXX〜AXXXXXXrXXXss:TXXXXXX NXXXw StrXXXXXXt、TXXXXXX ArXXXXXX、 CXXXXXXstXXXr、。 CZZZL〜ZZ:TEST、TXXXXXX、GrXXXXXXt、SuttoXXX MXXXXXX.Ctr。 。(XXXXXXuXXX)、TXXXXXX GrXXXXXXt SuttoXXX MXXXXXX.Ctr、OXXXXXX CXXXXXXstXXXr RoXXXXXX、GrXXXXXXt SuttoXXX、EXXXXXXXXXsXXXXXXrXXXポート、ZZZ ZPB〜XXXProXXXXXXXXXurXXX XXXXXXtXXX:XXX \ 03 \ 2016〜XXXStXXXtus 29:XXX〜XXXWXXXrXXX:XXX(XXXoXXXXXX)〜XXXBUILDINGXXXtXXXXXX:XXX CouXXXtXXXss oXXX CXXXXXXstXXXr〜XXXRXXXXXXXXXrrXXXXXXXXX XXXoXXXsuXXXtXXXXXXt:XXX ZZ (GPwer)〜XXXCoXXXsuXXXtXXXXXXt \ EXXXXXXosXXXopXXXst:XXX LXXXst XXXoXXXsuXXXtXXXXXXt:XXX EXXXXXXosXXXopXXXst No1の:ミスターZZZ vXXXXXXs HelloXXXs:NXXXXXXoXXXXXX AsXXX StXXXXXXXXXXXX BXXXzXXXXXXt〜XXXIXXXstruXXXXXXXXXt:XXX 11 GIF1T240 2130131〜XXXPrXXXXXXXXXXXXXXXXXXXXXtXXXoXXX:XXX〜XXXIXXXXXXXXXXXXXXXtXXXoXXXs:XXX〜 XXXRXXXport:XXX D2にTXXXXXX proXXXXXXXXXurXXX wXXXs XXXoXXXpXXXXXXtXXXXXX suXXXXXXXXXssXXXuXXXXXXy。 〜XXXDXXXXXXXXXXXXosXXXs:XXX〜XXXTXXXXXXrXXXpXXXutXXXXXX proXXXXXXXXXurXXXs:XXX〜XXXSpXXXXXXXXXXXXXXXXXXs TXXXXXXXXXXXX:XXX〜XXXMXXXXXXXXXXXXXXXtion:XXX〜XXXFollowアップ:XXX〜XXXAdvice \コメント:XXX〜

文字列はareadyチルダの数を持っており、これは結構です、と幸せこれらをそのまま残してください。しかし、いくつかの例では、チルダの文字数が60より大きい場合、60番目の文字ポイントに別のチルダを追加して、そのセクションをチルダに分割したいと思います。そして次のチルダに再び始まります。任意の少ない、これは結構ですし、何より、その後60の文字があってはならないチルダそれぞれとの間の基本的

は多数の機能、最後ビーイングを試してみました。

function addtilde(str) { 
    var result = ''; 
    while (str.length > 0) { 
    result += str.substring(0, 60) + "~"; 
    str = str.substring(60); 
    } 
    return result; 
} 

喜びはありません。どんなアイデアでも大歓迎です。

答えて

0

はここで楽しい小さな再帰的なソリューションです。 Inは、文字列の検索の開始インデックスを示す2番目のパラメータを取る、文字列の便利な.indexOfメソッドを使用します。

はテストしていませんが、それがうまく動作するはずです。 :)コール

var res = splitItUp("my string", 0); 

そして、それが結果を返すと、再帰オフ

function splitItUp(string, start) { 
    if (start > string.length - 60) return string; 
    var indexOf = string.indexOf('~', start); 
    if (indexOf - start > 60 || indexOf === -1) { 
     // insert the character 
     string = string.substring(0, start + 60) + '~' + string.substring(start+60); 
    } 
    return splitItUp(string, start+60); 
} 

キック。

2

replaceをその文字列に使用します。これは、「チルダなし、最大60回まで、、オプションでの後にチルダが続く」を検索し、チルダ以外の部分にチルダを返します。

str = str.replace ("([^\~]{1,60})\~?", 
    function (fullmatch, partmatch) { return partmatch+'~'; }, "g"); 
0

(簡潔のためES6の構文で)再帰的に行うには非常に楽しい:

var splitRun = txt => txt.length <= 60 
         ? txt 
         : (txt.substring(0,60) + "~" + splitRun(txt.substring(60))); 
var runs = originalText.split("~"); 
var treatedText = runs.map(splitRun).join("~"); 

次のようにそうでなければ、あなたはES5構文でsplitRunを言い換えることができます。

var splitRun = function(txt){ 
    return txt.length <= 60 
      ? txt 
      : (txt.substring(0,60) + "~" + splitRun(txt.substring(60))); 
} 
0

あなたが一致することができます1からnまでの任意の数の文字(この場合は60)と一致する正規表現。その後、同じトークンで再び結合します。

str = "UXXXXXXquXXX pXXXtXXXXXXXXXt ID: ~XXXTEST COPYXXX~XXXGXXXstrosXXXopy RXXXportXXX~NXXXXXXXXX: XXXDELTAXXX,DXXXXXXsy~CXXXsXXX XXXotXXX XXXo: XXX999999999XXX~45678: XXXXXX~DXXXtXXX oXXX XXXXXXrtXXX: XXX18\12\1968XXX~AXXXXXXrXXXss: TXXXXXX NXXXw StrXXXXXXt, TXXXXXX ArXXXXXX, CXXXXXXstXXXr, . CZZZL~ZZ: TEST, TXXXXXX GrXXXXXXt SuttoXXX MXXXXXX.Ctr. (XXXXXXuXXX), TXXXXXX GrXXXXXXt SuttoXXX MXXXXXX.Ctr., OXXXXXX CXXXXXXstXXXr RoXXXXXX, GrXXXXXXt SuttoXXX, EXXXXXXXXXsXXXXXXrXXX Port, ZZZ ZPB~XXXProXXXXXXXXXurXXX XXXXXXtXXX:XXX 29\03\2016~XXXStXXXtus:XXX ~XXXWXXXrXXX:XXX (XXXoXXXXXX)~XXXBUILDINGXXXtXXXXXX:XXX CouXXXtXXXss oXXX CXXXXXXstXXXr~XXXRXXXXXXXXXrrXXXXXXXXX XXXoXXXsuXXXtXXXXXXt:XXX ZZ (GPwer)~XXXCoXXXsuXXXtXXXXXXt\EXXXXXXosXXXopXXXst:XXX LXXXst XXXoXXXsuXXXtXXXXXXt:XXX EXXXXXXosXXXopXXXst No1: Mr ZZZ vXXXXXXs HelloXXXs: NXXXXXXoXXXXXX AsXXX StXXXXXXXXXXXX BXXXzXXXXXXt~XXXIXXXstruXXXXXXXXXt:XXX 11 GIF1T240 2130131~XXXPrXXXXXXXXXXXXXXXXXXXXXtXXXoXXX:XXX ~XXXIXXXXXXXXXXXXXXXtXXXoXXXs:XXX ~XXXRXXXport:XXX TXXXXXX proXXXXXXXXXurXXX wXXXs XXXoXXXpXXXXXXtXXXXXX suXXXXXXXXXssXXXuXXXXXXy to D2. ~XXXDXXXXXXXXXXXXosXXXs:XXX ~XXXTXXXXXXrXXXpXXXutXXXXXX proXXXXXXXXXurXXXs:XXX ~XXXSpXXXXXXXXXXXXXXXXXXs TXXXXXXXXXXXX:XXX ~XXXMXXXXXXXXXXXXXXXtion:XXX ~XXXFollow up:XXX ~XXXAdvice\comments:XXX ~" 
console.log(str.match(/[^~]{1,60}/g).join('~')); 
関連する問題