2009-11-20 104 views
39

我有一个字符串:“快速的棕色狐狸跳过懒惰的狗。”如何在javascript中每n个字符之后插入一个字符?

我想使用JavaScript(可能与jQuery)插入一个字符每n字符。例如,我想打电话:

var s = "The quick brown fox jumps over the lazy dogs."; 
var new_s = UpdateString("$",5); 
// new_s should equal "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs.$" 

的目标是要利用这个功能来插入&shy到长字符串,让他们来包装。也许有人知道更好的方法?

+0

你最好不要让浏览器自动换行。你是否有像上述例子那样的长句子,或长单词? – 2009-11-20 20:10:03

+1

浏览器不会包装在一个单词中,我有很长的单词,如“ThisIsAStupidLabelThatOneOfMyUsersWillTryToMakeInMyApplication” – brendan 2009-11-20 20:15:36

+0

服务器端解决方案将单词分成最多n个字符会更好吗? – Pool 2009-11-20 20:19:01

回答

50
function chunk(str, n) { 
    var ret = []; 
    var i; 
    var len; 

    for(i = 0, len = str.length; i < len; i += n) { 
     ret.push(str.substr(i, n)) 
    } 

    return ret 
}; 

chunk("The quick brown fox jumps over the lazy dogs.", 5).join('$'); 
// "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs." 
+3

+1,但是你的分号有点关闭;) – 2009-11-20 21:51:47

+0

@Andy E:嘿,它们在关闭'}'之前是可选的。我甚至没有意识到我已经这样做了。它是从一个“必须保存每个字节”的心态诞生的,在js压缩器成为标准之前几年;) – 2009-11-20 23:05:53

+0

'String.split(“”)'&'Array.form()' – 2017-08-30 02:47:25

106

随着正则表达式

"The quick brown fox jumps over the lazy dogs.".replace(/(.{5})/g,"$1$") 

The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs.$ 

欢呼声,

+8

该死!好的正则表达式在那里。 BTW是替换字符串中需要的最后一个'$'? – 2009-11-20 20:25:36

+2

替换字符串中最后一个** $ **不是必需的,您可以在这里以5个空格间隔放置任何想要放置的内容,例如**
**。 – skymook 2011-05-17 16:42:03

+4

我到达''string'.replace(/。{5}/g,“$&”+“
”);'。最后的连接只是为了更容易阅读。替换中的'$&'与匹配的字符串匹配,因此不需要分组。 – matpie 2014-03-19 22:49:17

1
var str="ABCDEFGHIJKLMNOPQR"; 
function formatStr(str, n) { 
    var a = [], start=0; 
    while(start<str.length) { 
     a.push(str.slice(start, start+n)); 
     start+=n; 
    } 
    console.log(a.join(" ")); 
} 
formatStr(str,3); 
+0

试着解释你的答案 – Coder 2017-03-10 16:36:43

1
let s = 'The quick brown fox jumps over the lazy dogs.'; 
s.split('').reduce((a, e, i)=> a + e + (i % 5 === 4 ? '$' : ''), ''); 

说明:分裂( '')变成一个字符串转换成一个数组。现在我们想要将数组转换回单个字符串。 减少在这种情况下是完美的。 Array的reduce函数需要3个参数,第一个是累加器,第二个是迭代元素,第三个是索引。由于数组索引为0,因此要在第5行之后插入,我们正在查看索引i%5 === 4.

0

有时您还希望从字符串的末尾开始插入字符到开头。在这种情况下,可以这样做:

function insert_spaces(string, space_every_nr, reverse, character) { 
var insert_string = string.toString(); 

if (reverse == true) { 
    var insert_string = string.toString(); 
    var length_of_string=string.length; 
    var count=0; 
    for (var i = 0; i < string.length+count; i+=space_every_nr) { 
     insert_string=insert_string.substring(0,i)+character+insert_string.substring(i ,(string.length+count)); 
     count++; 
    } 
    return insert_string 
} else if(reverse ==false) { 
    var count=0; 
    var j=0; 
    for (var i = string.length; i > 0; i -= space_every_nr) { 
     insert_string=insert_string.substring(0,i)+character+insert_string.substring(i ,(string.length+count)); 
     count++; 
    } 
    return insert_string; 
    } 
} 
0
function addItemEvery (str, item, every){ 
    for(let i = 0; i < str.length; i++){ 
    if(!(i % (every + 1))){ 
     str = str.substring(0, i) + item + str.substring(i); 
    } 
    } 
    return str.substring(1); 
} 

结果:

> addItemEvery("The quick brown fox jumps over the lazy dogs.", '$', 5) 
> "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs." 
相关问题