Я пытаюсь извлечь число из строки, используя регулярное выражение для JavaScript.
Тестовые случаи
value[0] ---> 0
value[1] ---> 1
object2value[0] ---> 0
object90 ---> no match
я пробовал использовать ([\w]+)*?\[\d\], но это дало
value[0] ---> value[0]
value[1] ---> value[1]
object2value[0] ---> object2value[0]
object90 ---> no match
как я могу этого добиться.
Может ли число быть больше 9? Тогда используй \d+
([\w]+)*? можно упростить до \w*. А поскольку он может соответствовать пустой строке, вы можете полностью исключить его из регулярного выражения. Вам просто нужно совместить цифру внутри [].
Разве \b\d+\b не может быть достаточно?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте утверждения просмотра назад и вперед:
const tests = `value[0]
value[1]
object2value[0]
object90`.match(/\S+/g);
const regex = /(?<=\w+\[)\d+(?=\])/;
tests.forEach(t => console.info(t, '=>', ...t.match(regex) ?? ['no match']));Чтобы извлечь имя и номер переменной:
const tests = `value[0]
value[1]
object2value[0]
object90`.match(/\S+/g);
const regex = /(\w+)\[(\d+)\]/;
tests.forEach(t => {
const [, value, num] = t.match(regex) ?? [, 'no match', 'no match'];
console.info(t, '=>', value, ':', num);
});Спасибо. Можете ли вы также помочь мне с извлечением строковой части? например, value[0] становится value, а value[1].id становится value
Гилани, это регулярное выражение соответствует "%[8]&$@#0[9]", с "9" возвращенным совпадением и "0" сохраненным для захвата группы 1. Это нормально? Если вы просто хотите вернуть цифры, заключенные в скобки, и вам не нужно проверять, что было раньше, просто сопоставьте (<=\[)\d+(?=\d) или \[(d+)\]. Если есть совпадение, интересующие цифры будут заданы совпадением в первом случае и будут удерживаться в группе захвата 1 во втором.
Поместите
\dв группу захвата, а затем используйтеmatch[2], чтобы получить совпадение с этой группой захвата.