jQuery替换匹配字符串中的字符串

jQuery替换匹配字符串中的字符串,jquery,regex,string,Jquery,Regex,String,我想替换括号内与regex匹配的文本(regex的第一组) 换句话说,我尝试捕获一个类似“[SomeText][1]”的字符串,并将其中的数字1替换为数字2。下面的代码将所有字符串替换为我不想要的2 regex = new RegExp("\\[.*\\]\\[(1)\\]"); textarea.val().replace(regex, 2); 有些文字正在改变。因此,replace(“[SomeText][1]”,“[SomeText][2]”不起作用。JavaScript中的replac

我想替换括号内与regex匹配的文本(regex的第一组)

换句话说,我尝试捕获一个类似“[SomeText][1]”的字符串,并将其中的数字1替换为数字2。下面的代码将所有字符串替换为我不想要的2

regex = new RegExp("\\[.*\\]\\[(1)\\]");
textarea.val().replace(regex, 2);

有些文字正在改变。因此,
replace(“[SomeText][1]”,“[SomeText][2]”
不起作用。

JavaScript中的replace方法允许您引用字符串中捕获的任何匹配项(使用paren捕获)。您将第一个引用为$1,第二个引用为$2,以此类推,最高可达$9。您可以将其更改为以下内容,我相信您会得到您想要的:

regex = new RegExp("(\\[.*\\]\\[)1(\\])");
textarea.val().replace(regex, "$12$2");

如果您总是想用
2
替换
1
,那么:

var str = "[SomeText][1]";
str = str.replace(/(\[[^\]]+\])(\[1\])/g, "$1[2]");
console.log(str); // "[SomeText][2]"
注意使用
$1
重复前导位

但更有趣的问题是在第二个括号中的数字上加一,这可以通过给
replace
一个函数来调用:


是的,一定有一些超级聪明的裤子可以做到这一点,但这里有一个简单的建议:

var bracketIdx = textarea.val().indexOf("[1]");
var value = textarea.val();
value[bracketIdx+1] = 2;
textarea.val() = value;

…听起来你在做一些有点奇怪的事情,但是如果你能更详细地说明你想完成什么,我会很乐意用更好的方式来解释。我这么问是因为我写的小片段有点难看。

为什么不干脆
textarea.val().replace(/\[1\]$/,“[2]”)?可以有多个[1],但不能有多个[SomeText][1],因为存在一个
$
var bracketIdx = textarea.val().indexOf("[1]");
var value = textarea.val();
value[bracketIdx+1] = 2;
textarea.val() = value;