繁体   English   中英

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

[英]How can I insert a character after every n characters in javascript?

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

我想使用 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.$"

目标是使用这个 function 将&shy插入长字符串以允许它们换行。

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

使用正则表达式

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

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

干杯,

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."

把事情简单化

  var str = "123456789";
  var parts = str.match(/.{1,3}/g);
  var new_value = parts.join("-"); //returns 123-456-789
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。

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

有时您还想开始从字符串末尾插入字符到开头。 在这种情况下,这可能会:

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;
  }
}
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."

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

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

我做了一些类似的事情,为移动应用程序分离了一个friendCode ,但使用了Arrayreduce

这将需要一个字符串,检查每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.$"
    //first parameter: the string to be divided
    //second parameter: the character used to separate
    //third parameter: the number of characters in each division

    function separateStr(str, divider,  n)
    {
          var ret=[];

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

          return ret.join(divider);
    };

    separateStr('123456789', '.',  3);

    //Output: '123.456.789'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM