正则表达式中使用方括号替换所有内容

5

我试图替换所有的[1](包括方括号),但是它替换了所有的1实例,而不是所有的[1]实例。

var index = 'abc123'
var regexp = new RegExp('[' + index + ']', 'g');
var new_id = new Date().getTime();

$(this).html().replace(regexp,'['+new_id+']')

转义特殊字符,兄弟。[]是一个范围选择器,例如[a-z] - vol7ron
4个回答

5

你需要使用\\字符来转义括号。

因为你正在编写Javascript字符串字面量,所以需要写\\来创建正则表达式转义的单个反斜杠。


我尝试转义括号,但它仍然替换了所有index变量的实例...无论是否有括号。 - Shpigford
你还需要在JS字符串字面量中转义\。我已经编辑了我的答案。 - SLaks
啊,这样就行了。没意识到我需要双斜杠。现在可以工作了。谢谢! - Shpigford

3

尝试转义括号

var regexp = new RegExp('\\[' + index + '\\]', 'g');

我尝试转义括号,但它仍然替换了所有index变量的实例...无论是否有括号。 - Shpigford
从另一个答案中我看到反斜杠也需要转义。干得好,SLaks。刚刚验证了在jsfiddle中双重转义可行。 - bbg

1

试试这个:

var index = 'abc123'
var regexp = new RegExp('\\[' + index + '\\]', 'g');
var new_id = new Date().getTime();

$(this).html().replace(regexp,new_id)

我修改了你代码的最后一行,因为它会改变所有的 [1],只需在替换函数中再添加括号即可。 还要转义你的括号。


-1

[]在正则表达式中是特殊的,它定义了一个字符类。例如:

/[a-z]/

匹配任何字母,从az。或者:

/[123abc]/

匹配 123abc

因此,您的正则表达式:

/[1]/

表示匹配 1 的任意一个字符。

你所需要做的是对 [ 和 ] 进行转义,如下所示:

/\[1\]/

或者更具体地说,在你的代码中:

$(this).html().replace(regexp,'\['+new_id+'\]')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接