如果两个波浪号之间的字符数大于60

时间:2016-04-07 14:49:12

标签: javascript function

我有一串文字,我希望在javascript中每隔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 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:先生ZZZ vXXXXXXs HelloXXXs:NXXXXXXoXXXXXX AsXXX StXXXXXXXXXXXX BXXXzXXXXXXt〜XXXIXXXstruXXXXXXXXXt:XXX 11 GIF1T240 2130131〜XXXPrXXXXXXXXXXXXXXXXXXXXXtXXXoXXX:XXX〜XXXIXXXXXXXXXXXXXXXtXXXoXXXs:XXX〜XXXRXXXport:XXX TXXXXXX proXXXXXXXXXurXXX wXXXs XXXoXXXpXXXXXXtXXXXXX suXXXXXXXXXssXXXuXXXXXXy到D2。 ~XXXDXXXXXXXXXXXXosXXXs:XXX~XXXTXXXXXXrXXXpXXXutXXXXXX proXXXXXXXXXurXXXs:XXX~XXXSpXXXXXXXXXXXXXXXXXXX TXXXXXXXXXXXX:XXX~XXXMXXXXXXXXXXXXXXXX:XXX~XXXFollow up:XXX~XXXAdvice \ comments:XXX~

该字符串有多个代字号,这很好,很高兴保留原样。但在某些情况下,如果波形符之间的字符数大于60,我想通过在第60个字符点添加另一个波形符来拆分该部分(波浪号到波浪号)。并重新开始,到下一个代字号。

基本上每个代字号之间不应该有超过60个字符,不过少就可以了。

尝试了很多功能,最后一次。

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

没有快乐,任何想法都会受到最高的赞赏。

4 个答案:

答案 0 :(得分:2)

对该字符串使用replace。它是一个单行代码,可以查找"没有代字号,最多可达60次,可选后跟代字号"并返回非波浪部分加上波形符。

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

答案 1 :(得分:0)

这是一个有趣的小递归解决方案。在字符串中使用方便的.indexOf方法,它采用第二个参数来指示字符串搜索的起始索引。

Haven未经过测试,但应该可以正常使用。 :)

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);
}

通过电话启动递归

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

然后返回结果。

答案 2 :(得分: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)));
}

答案 3 :(得分: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('~'));