2012-12-18 35 views
5

Làm cách nào để thay thế chuỗi con của chuỗi cho vị trí bắt đầu và độ dài?Thay thế chuỗi con bằng chuỗi có phạm vi trong JavaScript

Tôi đã hy vọng cho một cái gì đó như thế này:

var string = "This is a test string"; 
string.replace(10, 4, "replacement"); 

để string sẽ bằng

"this is a replacement string" 

..nhưng tôi không thể tìm thấy bất cứ điều gì như thế.

Bất kỳ trợ giúp đánh giá cao.

Trả lời

7

Như thế này:

var outstr = instr.substr(0,start)+"replacement"+instr.substr(start+length); 

Bạn có thể thêm nó vào nguyên mẫu của chuỗi:

String.prototype.splice = function(start,length,replacement) { 
    return this.substr(0,start)+replacement+this.substr(start+length); 
} 

(tôi gọi splice này vì nó rất giống với các chức năng Mảng cùng tên)

+0

Tôi thấy rằng cách tiếp cận của bạn cũng ngu ngốc dv'ed ':/' – VisioN

2

Phiên bản RegExp ngắn:

str.replace(new RegExp("^(.{" + start + "}).{" + length + "}"), "$1" + word); 

Ví dụ:

String.prototype.sreplace = function(start, length, word) { 
    return this.replace(
     new RegExp("^(.{" + start + "}).{" + length + "}"), 
     "$1" + word); 
}; 

"This is a test string".sreplace(10, 4, "replacement"); 
// "This is a replacement string" 

DEMO:http://jsfiddle.net/9zP7D/

+2

Đây là cách tôi sẽ làm điều đó cá nhân. ♥ regex. – elclanrs

+1

Regexes là không cần thiết chậm mặc dù: http://jsperf.com/string-splice –

0

Các Underscore String library có một phương pháp hàn trong đó hoạt động chính xác như bạn chỉ định.

_("This is a test string").splice(10, 4, 'replacement'); 
=> "This is a replacement string" 

Có rất nhiều chức năng hữu ích khác trong thư viện. Nó đồng hồ ở tốc độ 8kb và có sẵn trên cdnjs.

+0

@ cr0nicz Tôi đã đề cập đến Underscore.string. Kiểm tra liên kết. – tghw

0

Đối với giá trị của nó, hàm này sẽ thay thế dựa trên hai chỉ mục thay vì chỉ mục và độ dài đầu tiên.

splice: function(specimen, start, end, replacement) { 
    // string to modify, start index, end index, and what to replace that selection with 

    var head = specimen.substring(0,start); 
    var body = specimen.substring(start, end + 1); // +1 to include last character 
    var tail = specimen.substring(end + 1, specimen.length); 

    var result = head + replacement + tail; 

    return result; 
} 
Các vấn đề liên quan