如果两个波浪号字符之间的字符计数大于60,则在两个波浪字字符之间添加波浪号
Adding a tilde between two tilde characters if the character count between the two tilde is greater then 60
我有一个文本字符串,我想在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('~'));
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- 如果两个跨度有数据,则添加字符
- 如何在jQuery中搜索两个字符之间的字符串
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- Javascript 密码不应包含用户的帐户名或用户全名中超过两个连续字符的部分
- 电子邮件验证不接受仅包含两个字符的域
- 如何完成此循环?连接前面的两个字符
- 如何使用jQuery获取url的最后两个字符
- Javascript-使用Regex获取两个字符之间的字符
- Regex表达式,用于替换两个字符(包括字符)之间的字符串
- 通过JQuery在网页上的两个字符之间放置空格
- 如果两个波浪号字符之间的字符计数大于60,则在两个波浪字字符之间添加波浪号
- javascript:如何使用regex删除两个特殊字符之间的逗号(,)
- 如何匹配两个字符内的重复模式
- 在javascript中组合使用连字符连接的两个字符串
- Regex/Javascript;否定地选择两个字符的重复
- 匹配单词中两个相等的字符,并替换为一个RE
- 正则表达式不匹配序列中的两个相同字符
- 如何提取两个字符之间的字符串
- 如何在 javascript 中替换两个声明字符之间的字符串