如何使用JavaScript正则表达式提取字符串中方括号内的数字
解决方案
要提取方括号内的数字,同时忽略不含方括号的字符串,可以用以下两种正则方案:
方案1:捕获组匹配
使用正则 /\[(\d+)\]/,通过捕获组精准提取方括号里的数字:
const testCases = [ 'value[0]', 'value[1]', 'object2value[0]', 'object90' ]; testCases.forEach(str => { const match = str.match(/\[(\d+)\]/); const result = match ? match[1] : 'no match'; console.log(`${str} ---> ${result}`); });
运行结果完全符合预期:
value[0] ---> 0 value[1] ---> 1 object2value[0] ---> 0 object90 ---> no match
之前的正则问题出在哪?
你用的 ([\w]+)*?\[\d\] 是匹配整个前缀+方括号+数字的完整串(比如value[0]),而不是单独提取方括号内的数字。我们需要把正则焦点放在方括号内的数字上,用捕获组把这部分单独分离出来。
方案2:正向断言(ES2018+支持)
如果不想用捕获组,可以用正向前后断言直接匹配目标数字:
const regex = /(?<=\[)\d+(?=\])/; // 用法示例 console.log('value[123]'.match(regex)[0]); // 输出123 console.log('object90'.match(regex)); // 输出null
(?<=\[) 限定前面必须是[,(?=\])限定后面必须是],中间的\d+就是要提取的数字,匹配结果直接是数字本身,无需额外处理捕获组。
内容的提问来源于stack exchange,提问作者A Gilani
相关产品推荐
相关产品推荐

