Yanıtlar:
var a = "I want apple";
var b = " an";
var position = 6;
var output = [a.slice(0, position), b, a.slice(position)].join('');
console.log(output);
Aşağıdakiler, isteğe bağlı bir parametreyle text
istenen bir başka dizede birleştirmek için kullanılabilir .index
removeCount
if (String.prototype.splice === undefined) {
/**
* Splices text within a string.
* @param {int} offset The position to insert the text at (before)
* @param {string} text The text to insert
* @param {int} [removeCount=0] An optional number of characters to overwrite
* @returns {string} A modified string containing the spliced text.
*/
String.prototype.splice = function(offset, text, removeCount=0) {
let calculatedOffset = offset < 0 ? this.length + offset : offset;
return this.substring(0, calculatedOffset) +
text + this.substring(calculatedOffset + removeCount);
};
}
let originalText = "I want apple";
// Positive offset
console.log(originalText.splice(6, " an"));
// Negative index
console.log(originalText.splice(-5, "an "));
// Chaining
console.log(originalText.splice(6, " an").splice(2, "need", 4).splice(0, "You", 1));
.as-console-wrapper { top: 0; max-height: 100% !important; }
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
değdiğim şey için OP'lere "Elma istiyorum" yerine "Elma istiyorum" vermek olmalı .
var output = a.substring(0, position) + b + a.substring(position);
Düzenleme: değiştirilmiştir .substr
ile .substring
NEDENİYLE .substr
artık eski fonksiyonudur (başına https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substr
şu anda kullanımdan kaldırıldı. developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
substring
Bu durumda kaldırılmış için doğrudan yerine geçer substr
, bu nedenle cevap olur: var output = a.substring(0, position) + b + a.substring(position);
.
.substring
Bu işlevi string sınıfına ekleyebilirsiniz
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
böylece herhangi bir dize nesnesinde kullanabilirsiniz:
var my_string = "abcd";
my_string.insertAt(1, "XX");
ES6 dize değişmezlerini kullanmak çok daha kısa olacaktır:
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
console.log(insertAt('I want apple', ' an', 6)) // logs 'I want an apple'
Belki bu şekilde indexOf () kullanarak konum belirlerseniz daha da iyidir :
function insertString(a, b, at)
{
var position = a.indexOf(at);
if (position !== -1)
{
return a.substr(0, position) + b + a.substr(position);
}
return "substring not found";
}
sonra işlevi şöyle çağırın:
insertString("I want apple", "an ", "apple");
Dönüş deyiminde değil, işlev çağrısında "an" dan sonra bir boşluk bıraktığımı unutmayın.
Underscore.String kütüphanesi yapan bir işlevi vardır Ekle
insert (dize, dizin, alt dize) => dize
böyle
insert("Hello ", 6, "world");
// => "Hello world"
Deneyin
a.slice(0,position) + b + a.slice(position)
veya regexp çözümü
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Bu daha yavaş olur, ancak andan önce ve sonra alan eklemeyle ilgilenir. Ayrıca, konum değerini değiştirmeniz gerekir (2'ye, şimdi daha sezgisel)
Hızlı düzeltme! Manuel olarak boşluk eklemek istemiyorsanız bunu yapabilirsiniz:
var a = "I want apple";
var b = "an";
var position = 6;
var output = [a.slice(0, position + 1), b, a.slice(position)].join('');
console.log(output);
(edit: bunun aslında yukarıda cevaplandığını görüyorum, üzgünüm!)
ES2018'in bakış açısı mevcutsa , Nth karakterinden sonra sıfır genişlikli bir konumda "değiştirmek" için kullanılan bir daha regexp çözümü (@Kamil Kiełczewski'ninkine benzer, ancak ilk karakterleri bir yakalama grubunda saklamaksızın):
"I want apple".replace(/(?<=^.{6})/, " an")
Sadece küçük bir değişiklik 'yukarıdaki çözüm çıktılarına neden olur
"Bir elma istiyorum"
onun yerine
"Bir elma istiyorum"
Çıkışı şu şekilde almak için:
"Bir elma istiyorum"
aşağıdaki değiştirilmiş kodu kullan
var output = a.substr(0, position) + " " + b + a.substr(position);