Jawaban:
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);
Berikut ini dapat digunakan untuk menyambung textdalam string lain pada yang diinginkan index, dengan removeCountparameter opsional .
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('');memberikan OPs "Saya ingin sebuah apel", bukannya "Saya ingin sebuah apel".
var output = a.substring(0, position) + b + a.substring(position);
Sunting: diganti .substrdengan .substringkarena .substrsekarang merupakan fungsi lawas (per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr )
String.prototype.substrsudah usang sekarang. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
.substring
Anda dapat menambahkan fungsi ini ke kelas string
String.prototype.insert_at=function(index, string)
{
return this.substr(0, index) + string + this.substr(index);
}
sehingga Anda dapat menggunakannya pada objek string apa pun:
var my_string = "abcd";
my_string.insertAt(1, "XX");
Menggunakan string liter ES6 , akan jauh lebih pendek:
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'
Mungkin lebih baik jika Anda menentukan posisi menggunakan indexOf () seperti ini:
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";
}
lalu panggil fungsi seperti ini:
insertString("I want apple", "an ", "apple");
Perhatikan, bahwa saya meletakkan spasi setelah "an" dalam panggilan fungsi, bukan dalam pernyataan pengembalian.
The Underscore.String perpustakaan memiliki fungsi yang melakukan Insert
masukkan (string, index, substring) => string
seperti itu
insert("Hello ", 6, "world");
// => "Hello world"
mencoba
a.slice(0,position) + b + a.slice(position)
atau solusi regexp
"I want apple".replace(/^(.{6})/,"$1 an")
var array = a.split(' ');
array.splice(position, 0, b);
var output = array.join(' ');
Ini akan lebih lambat, tetapi akan mengurus penambahan ruang sebelum dan sesudah suatu Juga, Anda harus mengubah nilai posisi (menjadi 2, lebih intuitif sekarang)
Perbaikan cepat! Jika Anda tidak ingin menambahkan spasi secara manual, Anda dapat melakukan ini:
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);
(sunting: saya melihat ini benar-benar dijawab di atas, maaf!)
Jika ES2018's lookbehind tersedia , satu lagi solusi regexp, yang menggunakannya untuk "mengganti" pada posisi nol lebar setelah karakter Nth (mirip dengan @Kamil Kiełczewski's, tetapi tanpa menyimpan karakter awal dalam grup penangkapan):
"I want apple".replace(/(?<=^.{6})/, " an")
Yah hanya perubahan kecil karena output solusi di atas
"Aku mau apel"
dari pada
"Aku mau apel"
Untuk mendapatkan output sebagai
"Aku mau apel"
gunakan kode modifikasi berikut
var output = a.substr(0, position) + " " + b + a.substr(position);