Регулярное выражение для получения первого элемента каждой строки

#javascript #regex

#javascript #регулярное выражение

Вопрос:

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

 const totalWords = "===========nn  1-testnn 2-ests nn 1 zfzrf";

const firstWord = totalWords.replace(/s.*/,'')
  

Результат, который я получаю :

 1-test
2-ests 
1 zfzrf
  

Результат, который я хотел бы:

 1
2 
1 
  

Комментарии:

1. Что вы определяете как element ? Это число? Содержащее одну цифру? Какие-либо другие ограничения?

2. Какие допустимые разделители отделяют первый элемент строки от последующих? Из вашего примера я делаю вывод, что разделение выполняется через пробел или тире?

3. @StefanNeubert да, это либо пробел, либо тире

4. @AndyG число с одной степенью

Ответ №1:

В качестве альтернативы, если вас интересует версия без регулярных выражений (должна быть быстрее)

 var str = "===========nn  1-testnn 2-ests nn 1 zfzrf";

var res = str.split("n");
for (row of res) {
  let words = row.trim().split(' ');
  let firstWord = words[0].trim();
  // get first character, parse to int, validate it is infact integer
  let element = firstWord.charAt(0);
  if (Number.isInteger(parseInt(element))) {
    console.log('Row', row);
    console.log('Element: ', element);
  }
}  

Комментарии:

1. оно возвращает всю строку, я хочу получить только первый элемент в каждой строке, который в моем случае является числами

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

3. @tiaranane если возможно, пожалуйста, примите один из ответов, чтобы мы могли завершить этот вопрос. Спасибо!

Ответ №2:

Ваше регулярное выражение должно пропускать начальные пробелы, а затем фиксировать все, вплоть до пробела или тире, поэтому вы можете использовать ^s*([^ -] ) .

(См. https://regex101.com/r/u7ELiw/1 для применения к вашим примерам)

Если вы дополнительно точно знаете, что ищете одну цифру, вы можете вместо этого использовать ^s*(d)

(См. https://regex101.com/r/IWhEQ1/1 снова для приложений)

Ответ №3:

Возможно, я не слишком уверен, о чем вы спрашиваете, но почему вы используете что-то столь запутанное, как регулярное выражение, когда

 line.charAt(0)
  

работает довольно хорошо?