2013-04-26 44 views
9

所以我有一個很好的長字符串,我需要在Javascript中分割一定數量的字符。例如,如果我有如何在javascript中的特定數量的字符之後在空格處分割字符串?

「你是一隻狗,我是一隻貓。」

我希望它在10個字符後分裂,但在下一個空間...所以,而不是分裂狗,我希望下一個空間是分裂點。

我希望我寫得很清楚,有點尷尬的解釋。

編輯:我需要將所有這些存儲到數組中。所以按照我所描述的將字符串分開,但將其存儲到可以迭代的數組中。對不起,我說了一些混亂,有點奇怪。

+0

您選擇在分割點微調的空間答案的代碼,但是,這並不似乎是部分你的要求。 – Xotic750 2013-04-26 23:17:41

回答

15

考慮:

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

結果:

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

現在知道了更好的要求,這就是我會做的或類似的事情,但我通常更喜歡'〜'而不是'@'作爲標記。好東西! – elclanrs 2013-04-26 22:59:10

+0

最佳答案 - 謝謝。並向所有人回覆 – muzzledBYbrass 2013-04-26 22:59:22

+0

但空間發生了什麼?它們不是文本的一部分嗎?在修剪空間的問題中我沒有看到任何問題? – Xotic750 2013-04-26 23:14:00

4

這是你在追求什麼? 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); 

把它包起來,String.prototype.indexOf將返回-1如果你正在尋找的字符串沒有找到。爲了確保你不會得到錯誤的結果,請在最後一部分之前檢查。此外,該空間的索引可能是string.length - 1(該字符串中的最後一個字符是空格),在這種情況下,s.index(" ") + 1不會給你想要的。

+0

感謝您的回覆,但我需要將所有內容存儲到數組中,所以我無法刪除任何內容。它最有可能成爲正則表達式。 – muzzledBYbrass 2013-04-26 22:34:35

7

.indexOf有一個from參數。

str.indexOf(" ", 10); 

您可以拆分之前和之後得到的字符串,分別用:

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

下面是一些品種的正則表達式的解決方案:

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

不錯,謝謝先生。這是我要去的,但我需要有一個更大的字符串數組。所以,如果我有一個500個字符的字符串,我希望有一個像這樣分析的整個事件的數組,但只是應用於整個字符串。 – muzzledBYbrass 2013-04-26 22:32:27

+1

@elclanrs你是一個聰明的傢伙,但你應該記錄你的代碼。 :-) – Tim 2013-04-26 22:32:50

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))); 

產生

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

這就是東西。萬分感謝。 – muzzledBYbrass 2013-04-26 22:43:16

3

這應該做你想要什麼,並沒有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); 

jsfiddle

這裏是一個jsperf比較這個答案以及您選擇的正則表達式答案。

另:如果你想從每個文本塊修整的空間然後改變像這樣

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

看這幾個小時。優秀 ! – Zl3n 2016-03-20 20:46:33

相關問題