Replace First N Occurrences in the String

前端 未结 6 1684
终归单人心
终归单人心 2021-01-14 06:45

How can I replace first N occurrences of many whitespaces and tabs in the following string:

07/12/2017  11:01 AM             21523 filename with         


        
相关标签:
6条回答
  • 2021-01-14 06:51

    What about recursive version of you own solution?

    function repalceLeadSpaces(str, substitution, n) {
        n = n || 0;
        if (!str || n <= 0) {
            return str;
        }
        str = str.replace(/\s+/, substitution);
        return n === 1 ? str : repalceLeadSpaces(str, substitution, n - 1)
    }
    
    0 讨论(0)
  • 2021-01-14 06:53

    Derek and Nina provide great answers for dynamically replacing N whitespace groups. If N is static, the non-whitespace token (\S) can be used to match and keep the groups between whitespace:

    .replace(/\s+(\S+)\s+(\S+)\s+/, '|$1|$2|')

    0 讨论(0)
  • 2021-01-14 06:58

    You could take a counter and decrement it.

    var string = '07/12/2017  11:01 AM             21523 filename with s p a c  e  s.js',
        n = 4,
        result = string.replace(/\s+/g, s => n ? (n--, '|') : s);
        
    console.log(result);

    You could replace the ternary expression with one with logical AND and OR.

    var string = '07/12/2017  11:01 AM             21523 filename with s p a c  e  s.js',
        n = 4,
        result = string.replace(/\s+/g, s => n && n-- && '|' || s);
        
    console.log(result);

    0 讨论(0)
  • 2021-01-14 07:05

    I'd go with something like this. Though I kinda like Derek's answer so I'll look his up and understand what he/she does in it.

    var mytext = "some text separated by spaces and spaces and more spaces";
    var iterationCount = 4;
    while(iterationCount > 0)
      {
        mytext = mytext.replace(" ", "");
        iterationCount--;
      }
    return mytext;
    
    0 讨论(0)
  • 2021-01-14 07:09

    Some answers here are really good already, but since you say you want speed, I'd go with a single while, like this:

    var logLine = '07/12/2017  11:01 AM             21523 filename with s p a c  e  s.js';
    var N = 4;
    while(--N + 1){
      logLine = logLine.replace(/\s+/, '|');
    }
    console.log(logLine);

    Here's on JSFiddle: https://jsfiddle.net/2bxpygjr/

    0 讨论(0)
  • 2021-01-14 07:14

    Probably something like this:

    var txt = "07/12/2017  11:01 AM             21523 filename with s p a c  e  s.js";
    
    var n = 0, N = 4;
    newTxt = txt.replace(/\s+/g, match => n++ < N ? "|" : match);
    
    newTxt; // "07/12/2017|11:01|AM|21523|filename with s p a c  e  s.js"
    
    0 讨论(0)
提交回复
热议问题