Regex, чтобы получить первый элемент каждой строки - PullRequest
0 голосов
/ 13 марта 2019

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

const totalWords = "===========\n\n  1-test\n\n 2-ests \n\n 1 zfzrf";

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

На выходе я получаю:

1-test
2-ests 
1 zfzrf

Вывод, который я хотел бы:

1
2 
1 

Ответы [ 3 ]

2 голосов
/ 13 марта 2019

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

var str = "===========\n\n  1-test\n\n 2-ests \n\n 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 голос
/ 13 марта 2019

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

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

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

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

0 голосов
/ 13 марта 2019

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

line.charAt(0)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...