#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)
работает довольно хорошо?