2013-07-18 2 views
6

Как разбить строку, как этотJavaScript: разделив строку (еще сохраняя пробелы)

"please  help me " 

так, что я получаю массив так:

["please  ","help ","me "] 

Другими словами, я получить массив, который сохраняет пространство (или пространства)

Благодаря

+0

@PP Я вышел с моим решением, где я делаю для цикла и и для каждого элемента я проверяю с Шаром, если это пространство. .. и это работает, но я уверен, что должен быть лучший способ. – Zo72

+0

Почему бы не создать регулярное выражение и глобально соответствовать ему во время захвата? Кое-что вроде '(\\ S + \\ s +)' было бы достаточно. –

+0

@PP Можете ли вы уточнить ответ, если я сделаю «пожалуйста, помогите мне» .split ('\ s + \ S +') Я получаю массив с одним элементом [самой строкой]? – Zo72

ответ

13

что-то вроде:

var str = "please  help me "; 
var split = str.split(/(\S+\s+)/).filter(function(n) {return n}); 

FIDDLE

+0

@adaneo спасибо, что работает ... можете ли вы любезно объяснить, что делает reg expr ... Я поставлю правильный ответ. – Zo72

+2

'\ S' соответствует любому символу, который не является пробелом, добавив плюсы, делает его жадным, сопоставляя набор символов, а затем' \ s' делает противоположное, математическое пробелы и плюс делает его жадным, поэтому он соответствует группе, начинающейся с символов и заканчивающейся пробелом, а следующая группа начинается, когда после пробела есть символ и т. д. Фильтр удаляет совпадение в конце и начале и между каждой группой, как они являются emtpy. – adeneo

0

это сложно без использования функции;

var temp = "", outputArray = [], text = "please  help me ".split(""); 
for(i=0; i < text.length; i++) { 
    console.log(typeof text[i+1]) 
    if(text[i] === " " && (text[i+1] !== " " || typeof text[i+1] === "undefined")) { 
     outputArray.push(temp+=text[i]); 
     temp=""; 
    } else { 
     temp+=text[i]; 
    } 

} 
console.log(outputArray); 

Я не думаю, что это может помочь простому регулярному выражению. вы можете использовать прототип, чтобы использовать его как машинный код ...

String.prototype.splitPreserve = function(seperator) { 
    var temp = "", 
     outputArray = [], 
     text = this.split(""); 
    for(i=0; i < text.length; i++) { 
     console.log(typeof text[i+1]) 
     if(text[i] === seperator && (text[i+1] !== seperator || typeof text[i+1] === "undefined")) { 
      outputArray.push(temp+=text[i]); 
      temp=""; 
     } else { 
      temp+=text[i]; 
     } 

    } 
    return outputArray; 
} 

console.log("please  help me ".splitPreserve(" ")); 
Смежные вопросы