如何在javascript中每n个字符后插入一个字符?

Posted

技术标签:

【中文标题】如何在javascript中每n个字符后插入一个字符?【英文标题】:How can I insert a character after every n characters in javascript? 【发布时间】:2009-11-20 20:07:49 【问题描述】:

我有一个字符串: “敏捷的棕色狐狸跳过懒惰的狗。”

我想使用 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 插入到长字符串中以允许它们换行。

也许有人知道更好的方法?

【问题讨论】:

你最好让浏览器换行。您是否有像上面示例中使用的长句子或长词? 浏览器不会包含在一个单词中,我有很长的单词,例如“ThisIsAStupidLabelThatOneOfMyUsersWillTryToMakeInMyApplication” 将单词分解为最多 n 个字符的服务器端解决方案不是更好吗? 可能,但是对于我目前的困境来说,客户端解决方案更容易实现。 【参考方案1】:

使用正则表达式

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

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

干杯,

【讨论】:

该死!那里有很好的正则表达式。 BTW 是替换字符串中需要的最后一个$ 替换字符串中的最后一个 $ 是不需要的,你可以在此处以 5 个空格间隔放任何你想放的东西,例如 例如。 我到达"string".replace(/.5/g, "$&" + "<br>");。最后的连接只是为了使其更易于阅读。替换中的$& 匹配匹配的字符串,因此不需要分组。 从字符串末尾开始计数时如何工作? 太棒了。一个重要的注意事项是如果字符串包含换行符,这将从每行开头的零开始计数,因为. 不匹配\n\r。这非常适合折叠长行的明文,但可能不适用于 Web 内容。要在匹配中包含换行符,请使用 /[\s\S]5/g【参考方案2】:
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."

【讨论】:

@Andy E:嘿,在结束 之前它们是可选的。我什至没有意识到我已经这样做了。它源于 js 压缩器成为标准之前的“必须保存每个字节”的心态;) String.split("") & Array.form() 正则表达式 & string.split() & array.form() & slice() & map() & JSON.parse()【参考方案3】:

保持简单

  var str = "123456789";
  var parts = str.match(/.1,3/g);
  var new_value = parts.join("-"); //returns 123-456-789

【讨论】:

万一我有一个十个字母的数字,我只想在第 3 和第 6 个字母之后有“-”!而不是第 9 个字母。 @Learner 使用正则表达式删除最后一个“-”。 你能分享一下吗?提前致谢。 "123-456-789-0".replace(/-([^-]+)$/, '$1'); //删除最后一个破折号 喜欢这个想法。这也可以即时完成(当用户仍在打字时)?【参考方案4】:
let s = 'The quick brown fox jumps over the lazy dogs.';
s.split('').reduce((a, e, i)=> a + e + (i % 5 === 4 ? '$' : ''), '');

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

【讨论】:

非常感谢您提供此代码。这是代码,根据您的代码,我使用每 2 个字符添加一个空格来输入电话号码(keyup 事件):~~~ $(this).val( $(this).val().replace(/ /g,"").split('').reduce((a,e,i) => a + e + (i % 2 === 1 ? ' ': ''),'').trim( )); ~~~【参考方案5】:
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);

【讨论】:

试着解释你的答案【参考方案6】:
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."

【讨论】:

【参考方案7】:

这是以前的答案之一,但我将它包装在一个函数中,并给它一个“偏移”参数而不是硬编码。

// https://***.com/a/2712896/3480193
addCharToStringEveryXSpots(str, char, offset) 
    if ( ! char ) 
        return str;
    
    
    let regExPattern = new RegExp('(.' + offset + ')', 'g');
    
    return str.replace(regExPattern, '$1' + char);
;

【讨论】:

【参考方案8】:

我做了类似的事情,将friendCode 用于移动应用程序,但使用Array 和reduce。

这将接受一个字符串,检查每个n 字符并在该位置添加分隔符。

/**
 * A function to easily inject characters every 'n' spaces
 * @param string friendCode The string we want to inject characters in
 * @param * numDigits Determines the 'n' spaces we want to inject at
 * @param * delimiter The character(s) we want to inject
 */
function formatFriendCode(friendCode, numDigits, delimiter) 
  return Array.from(friendCode).reduce((accum, cur, idx) => 
    return accum += (idx + 1) % numDigits === 0 ? cur + delimiter : cur;
  , '')


formatFriendCode("000011112222", 4, ' ')
// output "0000 1111 2222 "

formatFriendCode("The quick brown fox jumps over the lazy dogs.", 5, '$')
// output "The q$uick $brown$ fox $jumps$ over$ the $lazy $dogs.$"

【讨论】:

以上是关于如何在javascript中每n个字符后插入一个字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在html输入中的四个字符后插入空格?

使用管道在输入中每 4 个字符添加一个空格

数据结构中计算字符串字串个数

在 Blazor 中的 4 个字符后插入空格

在 Java 中每隔 3 个逗号分割一个字符串

获取 scipy 稀疏矩阵中每一行的前 n 个项目