Я пытаюсь извлечь число из строки, используя регулярное выражение для 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 не может быть достаточно?
Используйте утверждения просмотра назад и вперед:
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]
, чтобы получить совпадение с этой группой захвата.