如果两个波浪号字符之间的字符计数大于60,则在两个波浪字字符之间添加波浪号

Adding a tilde between two tilde characters if the character count between the two tilde is greater then 60

本文关键字:字符 两个 之间 添加 如果 大于      更新时间:2024-03-02

我有一个文本字符串,我想在javascript中通过波浪号(~)每60个字符分割一次。

我有;

UXXXXXquXXX pXXXXtXXXXXXXXt ID:~XXXTEST COPYXX~XXXGXXXstrosXXXopy RXXXportXXX~NXXXXXXXXX:XXXDELTAXXX,DXXXXXXsy~CXXXsXXX XXXotXXX XXXo:XXX999999999XXX~445678:XXXXXX~DXXXtXXX oXXX XXXXXX rtXXX:XXX18''12''1968XXX~AXXXXXXXrss:TXXXXXX NXXXw StrXXXXXXt,TXXXXXX ArXXXXXXX,CXXXXXXXstXXXr。CZZZL~ZZ:TEST,TXXXXXX GrXXXXXXST SuttoXXX MXXXXXX.Ctr.(XXXXXX uXXX),TXXXXXXXX GrXXXXXXTT SuttoXXX MX XXXXXXX.Ctr.,OXXXXX CXXXXXXXSTXXXr RoXXXXXX,GrXXXXXXST萨特XXX,EXXXXXXXXXXXXXXXXXXX端口,ZZZ ZPB~XXXProXXXXXXXXurXXXXXXXXX tXXX:XXX 29''03''2016~XXXStXXXtus:XXX~XXXWXXXrXXX:XXX(XXXoXXXXXX)~XXXBUILDINGXXXtXXXXXX:XXX CouXXXtXXXss oXXX CXXXXXXXstXXXXr~XXXRXXXXXXXXrrXXXXXXXXXXXoXXXsuXXXXt:XXX ZZ(GPwer)~XXXCoXXXsuXXXXtXXXXXXt''EXXXXXXXXXopXXXst:XXX LXXXstXXXoXXXXsuXXXXtXXXXx:XXX EXXXXXXXXXOPXXXstNo1:Mr ZZZ vXXXXXXX HelloXXXs:NXXXXXXXXXXX AsXXX StXXXXXXXXXX BXXXzXXXXXXt~XXXIXXXstructureXXXXXXXXt:XXX 11 GIF1T240 2130131~XXXPrXXXXXXXXXXXXXXtXXXXoXXX:XXX~XXXIXXXXXXXXXtXXXoXXXs:XXX~XXXRXXXXX端口:XXX TXXXXXX项目XXXXXXXXurXXX wXXXXsXXXXpXXXXXXXXXXsuXXXXXXXXssXXXXuXXXXXXy到D2。~XXXDXXXXXXXXXosXXXs:XXX~XXXXXXXXXXXXXXXXpXXXXutXXXXXX项目XXXXXXXXurXXXXs:XXX~XXXSpXXXXXXXXXXXXXXX TXXXXXXXXX:XXX~XXXMXXXXXXXXXXXXXXXXX参与:XXX~XXX跟进:XXX~XXXAdvice''评论:XXX~

字符串有许多波浪形区域,这很好,很高兴保持原样。但在某些情况下,如果波浪号之间的字符数大于60,我希望通过在第60个字符点添加另一个波浪号来分割该部分(波浪号到波浪号)。然后重新开始,直到下一个波浪号。

基本上,每个波浪号之间不应该超过60个字符,只要少于就可以了。

尝试过许多功能,最后一个是。

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

没有快乐,任何想法都将不胜感激。

对该字符串使用replace。这是一个查找"无波浪号,最多60次,可选后跟波浪号"的单行符,并返回非波浪号部分加波浪号。

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

这里有一个有趣的小递归解决方案。In对字符串使用了方便的.indexOf方法,该方法使用第二个参数来指示字符串搜索的起始索引。

尚未测试,但它应该可以很好地工作。:)

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

并返回结果。

递归操作非常有趣(为了简洁起见,使用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)));
}

您可以匹配正则表达式,其中它匹配从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('~'));