我想替换正则表达式匹配的括号内的文本(第一组正则表达式)
换句话说,我试图捕捉像“[SomeText] [1]”这样的字符串,并用数字2替换数字1。下面的代码用2替换所有字符串,我不想要。
regex = new RegExp("\\[.*\\]\\[(1)\\]");
textarea.val().replace(regex, 2);
SomeText正在改变。所以replace("[SomeText][1]", "[SomeText][2]")
不起作用。
答案 0 :(得分:2)
JavaScript中的replace方法允许您引用字符串中捕获的任何匹配项(使用parens捕获)。你引用这些作为第一个$ 1,第二个$ 2等等,最高$ 9。您可以将其更改为以下内容,我相信您会得到您想要的内容:
regex = new RegExp("(\\[.*\\]\\[)1(\\])");
textarea.val().replace(regex, "$12$2");
答案 1 :(得分:0)
如果您确实总是希望将1
替换为2
,那么:
var str = "[SomeText][1]";
str = str.replace(/(\[[^\]]+\])(\[1\])/g, "$1[2]");
console.log(str); // "[SomeText][2]"
注意使用$1
重复前导位。 Live Example
但更有趣的问题是在第二个括号中添加一个,这可以通过给replace
一个函数来调用:Live Example
var str = "[SomeText][2]";
str = str.replace(/(\[[^\]]+\])\[(\d+)\]/g, function(m, c1, c2) {
return c1 + "[" + String(+c2 + 1) + "]";
});
console.log(str); // "[SomeText][3]"
答案 2 :(得分:0)
是的,必须要有一些超级聪明的裤子来做到这一点,但这里有一个简单的建议:
var bracketIdx = textarea.val().indexOf("[1]");
var value = textarea.val();
value[bracketIdx+1] = 2;
textarea.val() = value;
......听起来你正在做一些有点奇怪的事情,但是如果你用更详细的方式说明你想要完成的事情,那么很乐意解释一个更好的方法。我只是问,因为我写的小片段有点难看。