Insert a string at a specific index

前端 未结 18 709
眼角桃花
眼角桃花 2020-11-22 14:02

How can I insert a string at a specific index of another string?

 var txt1 = \"foo baz\"

Suppose I want to insert \"bar \" after the \"foo

相关标签:
18条回答
  • 2020-11-22 14:26

    Well, we can use both the substring and slice method.

    String.prototype.customSplice = function (index, absIndex, string) {
        return this.slice(0, index) + string+ this.slice(index + Math.abs(absIndex));
    };
    
    
    String.prototype.replaceString = function (index, string) {
        if (index > 0)
            return this.substring(0, index) + string + this.substr(index);
    
        return string + this;
    };
    
    
    console.log('Hello Developers'.customSplice(6,0,'Stack ')) // Hello Stack Developers
    console.log('Hello Developers'.replaceString(6,'Stack ')) //// Hello Stack Developers
    

    The only problem of a substring method is that it won't work with a negative index. It's always take string index from 0th position.

    0 讨论(0)
  • 2020-11-22 14:30

    Here is a method I wrote that behaves like all other programming languages:

    String.prototype.insert = function(index, string) {
      if (index > 0) {
        return this.substring(0, index) + string + this.substr(index);
      }
    
      return string + this;
    };
    
    //Example of use:
    var something = "How you?";
    something = something.insert(3, " are");
    console.log(something)

    Reference:

    • http://coderamblings.wordpress.com/2012/07/09/insert-a-string-at-a-specific-index/
    0 讨论(0)
  • 2020-11-22 14:31

    Inserting at a specific index (rather than, say, at the first space character) has to use string slicing/substring:

    var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3);
    
    0 讨论(0)
  • 2020-11-22 14:32

    You can do it easily with regexp in one line of code

    const str = 'Hello RegExp!';
    const index = 6;
    const insert = 'Lovely ';
        
    //'Hello RegExp!'.replace(/^(.{6})(.)/, `$1Lovely $2`);
    const res = str.replace(new RegExp(`^(.{${index}})(.)`), `$1${insert}$2`);
        
    console.log(res);

    "Hello Lovely RegExp!"

    0 讨论(0)
  • 2020-11-22 14:37

    You can use Regular Expressions with a dynamic pattern.

    var text = "something";
    var output = "                    ";
    var pattern = new RegExp("^\\s{"+text.length+"}");
    var output.replace(pattern,text);
    

    outputs:

    "something      "
    

    This replaces text.length of whitespace characters at the beginning of the string output. The RegExp means ^\ - beginning of a line \s any white space character, repeated {n} times, in this case text.length. Use \\ to \ escape backslashes when building this kind of patterns out of strings.

    0 讨论(0)
  • 2020-11-22 14:38

    You could prototype your own splice() into String.

    Polyfill

    if (!String.prototype.splice) {
        /**
         * {JSDoc}
         *
         * The splice() method changes the content of a string by removing a range of
         * characters and/or adding new characters.
         *
         * @this {String}
         * @param {number} start Index at which to start changing the string.
         * @param {number} delCount An integer indicating the number of old chars to remove.
         * @param {string} newSubStr The String that is spliced in.
         * @return {string} A new string with the spliced substring.
         */
        String.prototype.splice = function(start, delCount, newSubStr) {
            return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
        };
    }
    

    Example

    String.prototype.splice = function(idx, rem, str) {
        return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
    };
    
    var result = "foo baz".splice(4, 0, "bar ");
    
    document.body.innerHTML = result; // "foo bar baz"


    EDIT: Modified it to ensure that rem is an absolute value.

    0 讨论(0)
提交回复
热议问题