2013-04-26 63 views
9

Vì vậy, tôi có một chuỗi dài đẹp mà tôi cần phải phân chia trong Javascript tại một không gian sau một số lượng ký tự nhất định. Ví dụ: nếu tôi cóLàm cách nào để tách chuỗi tại một dấu cách sau một số ký tự nhất định trong javascript?

"Bạn là con chó và tôi là con mèo".

và tôi muốn chia nhỏ sau 10 ký tự nhưng ở không gian tiếp theo ... vì vậy thay vì tách con chó lên, tôi muốn không gian tiếp theo là điểm chia tách.

Tôi hy vọng tôi đã viết rõ ràng, một chút khó xử để giải thích.

CHỈNH SỬA: Tôi cần lưu trữ tất cả điều này vào một mảng. Vì vậy, tách chuỗi như tôi mô tả, nhưng lưu trữ nó vào một mảng mà tôi có thể lặp qua. Xin lỗi vì sự nhầm lẫn - như tôi đã nói, một chút kỳ quặc để mô tả.

+0

Câu trả lời bạn chọn cắt các không gian tại các điểm phân chia, nhưng điều đó không có vẻ như là một phần các yêu cầu của bạn. – Xotic750

Trả lời

15

xem xét:

str = "How razorback-jumping frogs can level six piqued gymnasts!" 
result = str.replace(/.{10}\S*\s+/g, "$&@").split(/\[email protected]/) 

Kết quả:

[ 
"How razorback-jumping", 
"frogs can level", 
"six piqued", 
"gymnasts!" 
] 
+0

Biết các yêu cầu tốt hơn bây giờ, đây là những gì tôi đã làm hoặc tương tự nhưng tôi thường thích '~' hơn là '@' làm mã thông báo. Đồ tốt! – elclanrs

+0

câu trả lời hay nhất- cảm ơn bạn. và với mọi người vì phản ứng của họ – muzzledBYbrass

+0

Nhưng điều gì đã xảy ra với không gian? Họ không phải là một phần của văn bản? Tôi không thấy bất cứ điều gì trong các câu hỏi nói rằng để cắt không gian? – Xotic750

4

Đây có phải là những gì bạn đang theo dõi không? http://jsfiddle.net/alexflav23/j4kwL/

var s = "You is a dog and I am a cat."; 
s = s.substring(10, s.length); // Cut out the first 10 characters. 
s = s.substring(s.indexOf(" ") + 1, s.length); // look for the first space and return the 
// remaining string starting with the index of the space. 
alert(s); 

Để quấn nó lên, String.prototype.indexOf sẽ trở lại -1 nếu chuỗi bạn đang tìm kiếm không được tìm thấy. Để chắc chắn rằng bạn không nhận được kết quả sai, hãy kiểm tra điều đó trước phần cuối cùng. Ngoài ra, chỉ mục của không gian có thể là string.length - 1 (ký tự cuối cùng trong chuỗi là khoảng trắng), trong trường hợp này s.index(" ") + 1 sẽ không cung cấp cho bạn những gì bạn muốn.

+0

cảm ơn phản hồi, nhưng tôi cần lưu trữ mọi thứ vào một mảng, vì vậy tôi không thể cắt bỏ bất cứ điều gì. nó sẽ là một điều regex rất có thể. – muzzledBYbrass

7

.indexOf có thông số from.

str.indexOf(" ", 10); 

Bạn có thể lấy chuỗi trước và sau khi chia tay, tương ứng với:

str.substring(0, str.indexOf(" ", 10)); 
str.substring(str.indexOf(" ", 10)); 
0

Dưới đây là một giải pháp regex cho một số nhiều:

var result = []; 
str.replace(/(.{10}\w+)\s(.+)/, function(_,a,b) { result.push(a,b); }); 

console.log(result); //=> ["You is a dog", "and I am a cat."] 
+0

đẹp, cảm ơn ngài. đây là những gì tôi sẽ cho nhưng tôi cần phải có một mảng của một chuỗi lớn hơn nhiều. Vì vậy, nếu tôi có một chuỗi ký tự 500 tôi muốn có một mảng của toàn bộ điều phân tích cú pháp như bạn có nó ở đây, nhưng chỉ áp dụng cho toàn bộ chuỗi. – muzzledBYbrass

+1

@elclanrs Bạn là một người thông minh nhưng bạn nên ghi lại mã của mình. :-) – Tim

0
function breakAroundSpace(str) { 
    var parts = []; 
    for (var match; match = str.match(/^[\s\S]{1,10}\S*/);) { 
    var prefix = match[0]; 
    parts.push(prefix); 
    // Strip leading space. 
    str = str.substring(prefix.length).replace(/^\s+/, ''); 
    } 
    if (str) { parts.push(str); } 
    return parts; 
} 

var str = "You is a dog and I am a cat and she is a giraffe in disguise."; 
alert(JSON.stringify(breakAroundSpace(str))); 

sản xuất

["You is a dog", 
"and I am a", 
"cat and she", 
"is a giraffe", 
"in disguise."] 
+0

đó là công cụ. cảm ơn một tấn. – muzzledBYbrass

3

này nên làm những gì bạn muốn, và không có regexs

var string = "You is a dog and I am a cat.", 
    length = string.length, 
    step = 10, 
    array = [], 
    i = 0, 
    j; 

while (i < length) { 
    j = string.indexOf(" ", i + step); 
    if (j === -1) { 
     j = length; 
    } 

    array.push(string.slice(i, j)); 
    i = j; 
} 

console.log(array); 

On jsfiddle

Và đây là một jsperf so sánh câu trả lời này và câu trả lời chính xác mà bạn đã chọn.

bổ sung: nếu bạn muốn để cắt các không gian từ mỗi khối văn bản sau đó thay đổi mã như vậy

array.push(string.slice(i, j).trim()); 
+0

Tìm kiếm trong vài giờ. Xuất sắc ! – Zl3n

Các vấn đề liên quan