只匹配javascript正则表达式中方括号中的数字,而不匹配前一个单词

只匹配javascript正则表达式中方括号中的数字,而不匹配前一个单词,javascript,regex,Javascript,Regex,我用javascript编写了以下正则表达式。我试图只匹配字符串中方括号内的第一个数字,因为我必须替换它。 这是我的密码 var str = 'dgt_gallery_item[3][type]'; var res = str.match(/^\w+\[(\d+)\]/g); var rep = str.replace(/^\w+\[(\d+)\]/g, 5 + 1); 这个想法是从一个或多个字母数字字符开始匹配,然后[,然后开始捕获一个或多个数字,然后] 我检查了,我的代码看起来是正确的,

我用javascript编写了以下正则表达式。我试图只匹配字符串中方括号内的第一个数字,因为我必须替换它。 这是我的密码

var str = 'dgt_gallery_item[3][type]'; 
var res = str.match(/^\w+\[(\d+)\]/g);
var rep = str.replace(/^\w+\[(\d+)\]/g, 5 + 1);
这个想法是从一个或多个字母数字字符开始匹配,然后[,然后开始捕获一个或多个数字,然后]

我检查了,我的代码看起来是正确的,但当我在浏览器中测试它时,它也匹配第一个单词。我怎么能跳过它


您可以使用此正则表达式:

var rep = str.replace(/(?!\[)\d/, (5+1));

解释:

(?!\[)   # the number must be preceded by one '[' character
         # without taking it
\d       # takes a one digit number .. 
         # you can use '\d+' to multiple digits number

Javascript正则表达式引擎不支持向后看,因此您需要在此处进行一些调整:

var str = 'dgt_gallery_item[3][type]';
var res = str.match(/(^\w+)\[(\d+)\]/g);
var rep = str.replace(/(^\w+)\[(\d+)\]/g, function(combinedMatch, pattern1, pattern2) {
    return pattern1 + "[" + 6 + "]";
});

输出:dgt_gallery_项目[6][type]

为什么不使用
substr
,使用
indexOf
获取方括号的位置,然后替换away@depperm在这种情况下,正则表达式看起来更干净,我不知道有多少位数。谢谢你的解释。