Javascript 正则表达式不包含括号中的内容

Javascript 正则表达式不包含括号中的内容,javascript,regex,replace,Javascript,Regex,Replace,我的目标是,正如标题所说的那样,将所有不在括号内的东西都包含在括号内,如下图所示: @tdWrap@ something here @tdWrapEnd@ 这就是我到目前为止所做的: var str = '1+[2/3]-23+2+<3,4,[22/7]+2;2,3,4>+2'; var indices = str.split(/\[[^\]]*\]|<[^>]*>/); var tdWrapper = []; for (var i = 0; i <

我的目标是,正如标题所说的那样,将所有不在括号内的东西都包含在括号内,如下图所示:

@tdWrap@ something here @tdWrapEnd@
这就是我到目前为止所做的:

var str = '1+[2/3]-23+2+<3,4,[22/7]+2;2,3,4>+2';

var indices = str.split(/\[[^\]]*\]|<[^>]*>/);

var tdWrapper = [];

for (var i = 0; i < indices.length; i++) {
    tdWrapper[i] = '@tdWrap@' + indices[i] + '@tdWrapEnd@'
}
for (var i = 0; i < indices.length; i++) {
    indices[i] = indices[i].replace(/([\+\-\*\?])/g, '\\$1')
}


var regObj;
for (var i = 0; i < indices.length; i++) {
    regObj = new RegExp(indices[i]);
    str = str.replace(regObj, tdWrapper[i])
}
var str='1+[2/3]-23+2++2';
var index=str.split(/\[^\]*\]\]\\]\\]\;]*>/);
var-tdWrapper=[];
对于(var i=0;i
问题是,当我在字符串中替换时,有一个重复的字符串,所以我不能替换正确的东西。这是我想要结束的字符串:

@tdWrap@1+@tdWrapEnd@[2/3]@tdWrap@-23+2+@tdWrapEnd@<3,4,[22/7]+2;2,3,4>@tdWrap@+2@tdWrapEnd@
@tdWrap@1+@tdWrapEnd@[2/3]@tdWrap@-23@tdWrap@+2@tdWrapEnd@+@tdWrapEnd@<3,4,[22/7]+2;2,3,4>+2
@tdWrap@1+@tdWrapEnd@[2/3]@tdWrap@-23+2+@tdWrapEnd@@tdWrap@+2@tdWrapEnd@
但这是我最后得到的字符串:

@tdWrap@1+@tdWrapEnd@[2/3]@tdWrap@-23+2+@tdWrapEnd@<3,4,[22/7]+2;2,3,4>@tdWrap@+2@tdWrapEnd@
@tdWrap@1+@tdWrapEnd@[2/3]@tdWrap@-23@tdWrap@+2@tdWrapEnd@+@tdWrapEnd@<3,4,[22/7]+2;2,3,4>+2
@tdWrap@1+@tdwrappend@[2/3]@tdWrap@-23@tdWrap@+2@tdWrapEnd@+@tdWrapEnd@+2

您可以使用
replace
方法和闭包来完成。您需要将所有要跳过的内容放入捕获组中,以便按原样返回:

var str = '1+[2/3]-23+2+<3,4,[22/7]+2;2,3,4>+2';

var result = str.replace(/[0-9+*\/-]+|(\[[^\]]*\]|<[^>]*>)/g, function (m, g1) {
    if (g1 == undefined) return '@tdWrap@' + m + '@tdWrapEnd@';
    return g1;
});

console.log(result);
var str='1+[2/3]-23+2++2';
var result=str.replace(/[0-9+*\/-]+|(\[^\]*\]*\]\]\]*>)/g,函数(m,g1){
if(g1==未定义)返回'@tdWrap@'+m+'@tdwrappend@';
返回g1;
});
控制台日志(结果);

@VictorVH:注意,我没有在character类中添加问号,因为我不明白为什么它必须在这里,但是如果需要,可以添加它。如何调用该函数?m和g1是什么?@VictorVH:在每次匹配时调用该函数,
m
包含整个匹配结果,
g1
包含第一个捕获组结果。当模式在尖括号或方括号之间成功时,将定义第一个捕获组(和g1),并返回组内容。谢谢。你帮了大忙。你有这方面的文件吗?我好像找不到any@VictorVH:是官方文件: