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('');
您可以使用dynamic模式的正则expression式。
var text = "something"; var output = " "; var pattern = new RegExp("^\\s{"+text.length+"}"); var output.replace(pattern,text);
输出:
"something "
这将replacestringoutput
开始处的空白字符的text.length
。 RegExp
意思是^\
– 行的开始\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)
。 这个想法依然存在,虽然。