JavaScript:如何在特定索引处插入string

我怎样才能插入一个string在另一个string的特定索引?

var txt1 = "foo baz" 

假设我想在“foo”之后插入“bar”,我该如何实现呢? 我想到了子串,但是一定有一个更简单更直接的方法?

你可以把你自己的splice()原型转换成String。

填充工具

 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)); }; } 

 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" 

在特定索引(而不是第一个空格字符)插入必须使用string切片/子string:

 var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3); 

尝试这个。 这是我写的一个方法,就像所有其他编程语言一样。

 String.prototype.insert = function (index, string) { if (index > 0) return this.substring(0, index) + string + this.substring(index, this.length); else return string + this; }; 

使用示例:

 var something = "How you?"; something = something.insert(3, " are"); 

Simples。

参考: http : //coderamblings.wordpress.com/2012/07/09/insert-a-string-at-a-specific-index/

只要做以下的function:

 function insert(str, index, value) { return str.substr(0, index) + value + str.substr(index); } 

然后像这样使用它:

 alert(insert("foo baz", 4, "bar ")); 

输出:foo bar baz

它的行为就像C#(Sharp)String.Insert(int startIndex,string value)一样。

注意:这个插入函数在stringstr (第一个参数)中的指定整数索引 (第二个参数) 之前插入string (第三个参数),然后返回新的string而不改变str

更新2016年:这是另一种基于RegExp方法的有趣 (但更严重!)原型函数(预先支持undefined或负index ):

 /** * Insert `what` to string at position `index`. */ String.prototype.insert = function(what, index) { return index > 0 ? this.replace(new RegExp('.{' + index + '}'), '$&' + what) : what + this; }; console.log( 'foo baz'.insert('bar ', 4) ); // "foo bar baz" console.log( 'foo baz'.insert('bar ') ); // "bar foo baz" 

以前(回到2012年) 只是为了好玩的解决scheme:

 var index = 4, what = 'bar '; 'foo baz'.replace(/./g, function(v, i) { return i === index - 1 ? v + what : v; }); // "foo bar baz" 

这基本上是做什么@ Bass33正在做什么,除了我也给出了使用负指数从结束计数的选项。 有点像substr方法允许的。

 // use a negative index to insert relative to the end of the string. String.prototype.insert = function (index, string) { var ind = index < 0 ? this.length + index : index; return this.substring(0, ind) + string + this.substring(ind, this.length); }; 

使用案例:比方说,你有使用命名约定全尺寸的图像,但不能更新数据也提供缩略图url。

 var url = 'http://img.dovov.commyimage.jpg'; var thumb = url.insert(-4, '_thm'); // result: 'http://img.dovov.commyimage_thm.jpg' 

如果有人正在寻找一种方法来在string中的多个索引处插入文本,请尝试以下操作:

 String.prototype.insertTextAtIndices = function(text) { return this.replace(/./g, function(character, index) { return text[index] ? text[index] + character : character; }); }; 

例如,您可以使用它在特定的偏移量处插入<span>标签中的string:

 var text = { 6: "<span>", 11: "</span>" }; "Hello world!".insertTextAtIndices(text); // returns "Hello <span>world</span>!" 

鉴于你现在的例子,你可以通过任一个来获得结果

 var txt2 = txt1.split(' ').join(' bar ') 

要么

 var txt2 = txt1.replace(' ', ' bar '); 

但考虑到你可以做出这样的假设,你不妨直接跳到古伦的榜样。

在这种情况下,除了基于字符索引之外,你真的不能做出任何假设,那么我真的会去找一个子串的解决scheme。

 my_string = "hello world"; my_insert = " dear"; my_insert_location = 5; my_string = my_string.split(''); my_string.splice( my_insert_location , 0, my_insert ); my_string = my_string.join(''); 

https://jsfiddle.net/gaby_de_wilde/wz69nw9k/

您可以使用dynamic模式的正则expression式。

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

输出:

 "something " 

这将replacestringoutput开始处的空白字符的text.lengthRegExp意思是^\ – 行的开始\s任何空白字符,重复{n}倍,在这种情况下text.length 。 使用\\ \在从string中构build这种模式时避免使用反斜杠。

另一种解决方法,把string切成2,然后放入一个string。

 var str = jQuery('#selector').text(); var strlength = str.length; strf = str.substr(0 , strlength - 5); strb = str.substr(strlength - 5 , 5); jQuery('#selector').html(strf + 'inserted' + strb); 
 function insertString(string, insertion, place) { return string.replace(string[place] + string[place + 1], string[place] + insertion + string[place + 1]) } 

所以,对于你来说,它会是insertString("foo baz", "bar", 3);

显然,这将是一个使用的颜料,因为你必须提供你的string的函数每一次,但目前我不知道如何使它更容易像一个string.replace(insertion, place) 。 这个想法依然存在,虽然。