【问题标题】:JavaScript - Add delimiters to a stringJavaScript - 为字符串添加分隔符
【发布时间】:2020-11-16 03:37:05
【问题描述】:

我正在尝试找出一种方法来将某种形式的分隔符添加到 Javascript 中的长字符串中。例如,如果我有一个 26 个字符的字符串(见下文),我有没有办法在该字符串中的每个 x(假设在这种情况下,每 3 个)字符后添加一个空格或逗号。 预期输出: "abc def ghi jkl mno pqr stu vwx yz"

var str = "abcdefghijklmnopqrstuvwxyz";

【问题讨论】:

  • 请展示您尝试过的一些代码,以证明您已经尝试过。这是 StackOverflow 的规则之一。在这里阅读更多idownvotedbecau.se/noattempt(我没有投票,这只是网站的名称:))

标签: javascript


【解决方案1】:

我认为这是最简单的方法:

const str = "abcdefghijklmnopqrstuvwxyz"
const result = str.replaceAll(/(.{3})/g, '$1 ')

console.log(result)

【讨论】:

  • 您可能想改用字符串"abcdefghijklmnopqrstuvwxyz",以便它与问题和其余解决方案保持一致。
  • @Samathingamajig 我的错,对不起
【解决方案2】:

var str = "abcdefghijklmnopqrstuvwxyz";
var ary = [];
for(i = 0, len = str.length; i < len; i += 3) {
   ary.push(str.substr(i, 3))
}
const output = ary.join(' ');
console.log(output);

【讨论】:

    【解决方案3】:

    将 .match() 与正则表达式一起使用,然后使用空格将值连接在一起。

    let str = "abcdefghijklmnopqrstuvwxyz";
    // use regex to match
    let newStr = str.match(/.{1,3}/g);
    // join the arrray values back to string but add a space at each values beginning
    let joined = newStr.join(" ");
    console.log(joined)

    【讨论】:

      【解决方案4】:

      编辑:封装在函数中

      这可以通过使用正则表达式来完成(您可以将 3 替换为另一个数字或使用 ${aNumber} 将其更改为变量以更改块的大小

      var str = "abcdefghijklmnopqrstuvwxyz";
      
      const delimit = (text, chunkSize, delimiter) => text.match(new RegExp(`.{1,${chunkSize}}`, 'g')).join(delimiter);
      
      console.log(delimit(str, 3, ' ')); //output abc,def,ghi,jkl,mno,pqr,stu,vwx,yz

      【讨论】:

      • 虽然您的编辑工作正常,但您仍然忘记在函数内部使用传递给函数的变量。
      • 看我的编辑建议,你忘了用chunkSizetext
      【解决方案5】:

      一种简单的方法是将字符串转换为数组并返回

          var str = "abcdefghijklmnopqrstuvwxyz";
      
          var strArr = str.split('')
      
          var newStr =  '', x = 0;
      
          for(let i = 0; i < strArr.length; i++){    
      
              
      
              if(x < 3){
                  newStr += strArr[i]
                  x +=1;
                  
              }
              if (x == 3) {
                  newStr += " "
                  x = 0;
                  
              }
          }
      
          console.log(newStr)
      

      【讨论】:

        【解决方案6】:

        可以使用follow方法将字符串分隔为3个字符:

        var str = 'abcdefghijklmnopqrstuvwxyz';
        var arr=str.match(/.{1,3}/g);
        var newString="";
        arr.forEach(element => newString+=element+" ");
        console.log(newString);
        此打印答案如下:
        "abc def ghi jkl mno pqr stu vwx yz "
        

        var str = 'abcdefghijklmnopqrstuvwxyz';
        var arr=str.match(/.{1,3}/g);
        var newString=arr.join(" ");
        console.log(newString);

        此打印答案如下:

        abc def ghi jkl mno pqr stu vwx yz
        

        【讨论】:

          【解决方案7】:

          我同意最简单、最明显的正则表达式解决方案。但也有一种功能性方法,以防万一,而不是出于教育目的:

          const str = "abcdefghijklmnopqrstuvwxyz";
          
          const s = str.split('')
                       .map((x,i) => (i % 3 - 2 == 0) ? x + ',' : x)
                       .join('');
          
          console.log(s) // abc,def,ghi,jkl,mno,pqr,stu,vwx,yz

          【讨论】:

            【解决方案8】:

            通过递归函数的经典解决方案:

            var str = 'abcdefghijklmnopqrstuvwxyz';
            
            function add_delimiters(s, n, d) {
              return (s.length > n)
                ? s.slice(0, n) + d + add_delimiters(s.slice(n, s.length), n, d)
                : s;
            }
            
            console.log(add_delimiters(str, 3, ',')); // abc,def,ghi,jkl,mno,pqr,stu,vwx,yz

            【讨论】:

              【解决方案9】:

              output = "abcdefghijklmnopqrstuvwxyz".replace(/(.{3})/g, '$1 ')
              console.log(output)

              【讨论】:

              • 你为什么特别说要匹配除逗号,之外的每个字符?而且这个输出不符合OP的要求,这个输出用逗号而不是空格。
              • 好吧,我测试成功后忘记编辑解决方案了。谢谢你。我们不需要 [^,]。你知道,你可以用空格替换“,”
              猜你喜欢
              • 2021-01-21
              • 2019-08-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-02-07
              • 2014-06-29
              • 2013-10-30
              • 1970-01-01
              相关资源
              最近更新 更多