2014-01-25 5 views
1

У меня есть строка, которая может содержать слова и пробелы.
Я хочу вернуть первое слово внутри строки.return first element not empty element of array

Мой метод был:

  • применить .split(' ') к нему, чтобы удалить пробелы.
  • сделать .filter(function(el){ return (el != '') }
  • получить первый элемент, используя [0]

есть более оптимизированный способ это? Может быть, регулярное выражение?

Мой код:

var string = " foo bar "; 
function getFirst(str) { 
    var separatedString = str.split(' '); 
    separatedString = separatedString.filter(function (el) { 
     return (el != '') 
    }) 
    return separatedString[0]; 
} 

Fiddle

ответ

2

Вероятно, наиболее близкий эквивалент вашего кода будет эта строка:

var word1 = s.replace(/\s*(\S+).*/, '$1'); 

Поскольку вы разбиваете пространство, поэтому этот код будет просто захватывать самую первую непространственную подстроку из заданного ввода.

+1

+1 для новой альтернативы. [Сравнено] (http://jsperf.com/get-first-class) и пойдет на альтернативу dystroy, но оценит новую идею (мне) использования replace. Спасибо! – Rikard

+0

Ваше решение принимает 'foo-bar', и в этом случае это [самый быстрый] (http://jsperf.com/get-first-class/3) ... Спасибо! – Rikard

1

Вы можете сделать

var firstWord = string.match(/\S+/)[0]; 
+0

+1 для faaast ответа. Это фильтр для классов CSS. Поэтому под словом «слово» я подразумеваю слово, которое является допустимым именем класса CSS. Я хочу отфильтровать пустые пространства и просто использовать первый класс, если их много. – Rikard

+0

@Rikard Итак, я думаю, что это будет ('" foo3_ bar ".match (/ \ w + /) [0];' => '" foo3_ "') –

+0

Отлично! Еще раз спасибо! (merci!) – Rikard

1

Вы можете использовать trim и раскол на несколько пробелов и использовать string.length в фильтре:

function getFirst(str) { 
    var separatedString = str.split(/\s+/).filter(function (el) { 
      return el.length; 
     }); 
    return separatedString[0]; 
} 
getFirst(' foo-bar foo bar [email protected] '); //=> 'foo-bar'