【问题标题】:Remove (n)th space from string in JavaScript删除)JavaScript中字符串中的空格
【发布时间】:2023-04-06 23:38:01
【问题描述】:

我正在尝试从一些动态生成的字符串中删除一些空格。我删除哪个空格取决于字符串的长度。字符串一直在变化,所以为了知道有多少空格,我迭代字符串并在每次迭代遇到空格时递增一个变量。我已经可以使用str.replace(' ',''); 删除所有特定类型的字符,其中'str' 是我的字符串的名称,但我只需要删除特定出现的空格,而不是所有空格。所以假设我的字符串是

var str = "Hello, this is a test.";

如何只删除“is”后面的空格? (假设下一个字符串会有所不同,所以我不能只写 str.replace('is ','is'); 因为单词“is”可能不在下一个字符串中)。

我检查了documentation on .replace,但它没有接受其他参数,所以我不能告诉它只是替换第 n 个空格实例。

【问题讨论】:

    标签: javascript string replace


    【解决方案1】:

    如果你想通过空格的索引去:

    var str = 'Hello, this is a test.';
    
    function replace(str, indexes){
        return str.split(' ').reduce(function(prev, curr, i){
            var separator = ~indexes.indexOf(i) ? '' : ' ';
            return prev + separator + curr;
        });
    }
    
    console.log(replace(str, [2,3]));
    

    http://jsfiddle.net/96Lvpcew/1/

    【讨论】:

      【解决方案2】:

      由于您很容易获得空间的索引(当您迭代字符串时),您可以通过以下方式创建一个没有空间的新字符串:

      str = str.substr(0, index)+ str.substr(index);
      

      其中index 是您要删除的空间的索引。

      【讨论】:

        【解决方案3】:

        我为未知索引想出了这个

        function removeNthSpace(str, n) {
            var spacelessArray = str.split(' ');
            return spacelessArray
                       .slice(0, n - 1) // left prefix part may be '', saves spaces
                       .concat([spacelessArray.slice(n - 1, n + 1).join('')]) // middle part: the one without the space
                       .concat(spacelessArray.slice(n + 1)).join(' '); // right part, saves spaces
        }
        

        【讨论】:

          【解决方案4】:

          由于字数或字符数,您知道要删除哪个空格吗?

          如果字符数,你可以拉斐尔卡多索的答案,

          如果字数统计,您可以用空格分隔它们,然后随意加入:

          var wordArray = str.split(" ");
          var newStr = "";
          wordIndex = 3; // or whatever you want
          for (i; i<wordArray.length; i++) {
             newStr+=wordArray[i];
             if (i!=wordIndex) {
               newStr+=' ';
             }
          }
          

          【讨论】:

          • 谢谢 ziv,它是按字符数计算的,我刚刚看到你的答案,所以我选择了 Cardoso 的答案。不过感谢您的帮助。欣赏它。
          【解决方案5】:

          我认为你最好的选择是根据字符串中空格的位置将字符串拆分为一个数组,拼接掉你不需要的空间,然后将数组重新加入一个字符串。

          看看这个:

          var x = "Hello, this is a test.";
          var n = 3; // we want to remove the third space
          var arr = x.split(/([ ])/); // copy to an array based on space placement
          // arr: ["Hello,"," ","this"," ","is"," ","a"," ","test."]
          arr.splice(n*2-1,1); // Remove the third space
          x = arr.join("");
          alert(x); // "Hello, this isa test."

          补充说明

          首先要注意的是str.replace(' ',''); 实际上只会替换空格字符的第一个实例。 String.replace() 还接受一个正则表达式作为第一个参数,您可以将其用于更复杂的替换。

          要实际替换字符串中的所有空格,您可以使用str.replace(/ /g,"");,要替换所有空格(包括空格、制表符和换行符),您可以使用str.replace(/\s/g,"");

          要摆弄不同的正则表达式并了解它们的含义,我建议使用http://www.regexr.com

          JavaScript String 对象上的很多函数似乎都接受字符串作为参数,也可以接受正则表达式,包括.split().search()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多