簡體   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