Почему регулярка захватывает больше, чем необходимо?
Есть реуглярка:
'.+'
Есть код:
t('-').map((word, index) => (index ? `${word[0].toUpperCase()}${word.slice(1)}` : word)).join('')
Ожидание:
'-'
Реальность:
'-').map((word, index) => (index ? `${word[0].toUpperCase()}${word.slice(1)}` : word)).join(''
Ответы (1 шт):
Автор решения: another_login
→ Ссылка
По умолчанию квантификаторы (+ в Вашем случае) являются "жадными", и покрывают максимальную последовательность. Вам нужно добавить ?, чтобы сделать их "нежадными" (также "ленивыми"), тогда они станут покрывать минимальную последовательность.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Regular_Expressions#special-questionmark
const test_data = ["t('-').map((word, index) => (index ? `${word[0].toUpperCase()}${word.slice(1)}` : word)).join('')", "t('фывфывф')", "'1'2'3'4'5'"];
const regex = /'.+?'/;
for (t in test_data) {
let m = test_data[t].match(regex);
console.log(test_data[t], '→', m !== null ? m[0] : null);
}
а если ленивых квантификаторов в используемом движке нет?
Тогда, в данном случае, я искал бы не любой символ, а "не одинарную кавычку":
const test_data = ["t('-').map((word, index) => (index ? `${word[0].toUpperCase()}${word.slice(1)}` : word)).join('')", "t('фывфывф')", "'1'2'3'4'5'"];
const regex = /'[^']+'/;
for (t in test_data) {
let m = test_data[t].match(regex);
console.log(test_data[t], '→', m !== null ? m[0] : null);
}