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

时间:2014-08-26 18:07:10

标签: jquery regex string

我想替换正则表达式匹配的括号内的文本(第一组正则表达式)

换句话说,我试图捕捉像“[SomeText] [1]”这样的字符串,并用数字2替换数字1。下面的代码用2替换所有字符串,我不想要。

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

SomeText正在改变。所以replace("[SomeText][1]", "[SomeText][2]")不起作用。

3 个答案:

答案 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;

......听起来你正在做一些有点奇怪的事情,但是如果你用更详细的方式说明你想要完成的事情,那么很乐意解释一个更好的方法。我只是问,因为我写的小片段有点难看。