带有方括号的RegExp替换了所有内容

时间:2011-07-06 02:59:44

标签: javascript jquery regex

我正在尝试替换[1]的所有实例(包括括号),但不是替换[1]的所有实例,而是替换1的所有实例。

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

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

4 个答案:

答案 0 :(得分:4)

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

由于您正在编写Javascript字符串文字,因此需要编写\\来为正则表达式转义创建单个反斜杠。

答案 1 :(得分:2)

尝试转义括号

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

答案 2 :(得分:0)

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

/[a-z]/

匹配任何字母, a z 。或者:

/[123abc]/

匹配 1 2 3 a b ,或者<强> C

所以你的正则表达式:

/[1]/

意味着匹配 1 的任何字符。

你需要做的是逃避[和]这样:

/\[1\]/

或者特别是在您的代码中:

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

答案 3 :(得分:0)

试试这个:

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

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

我更改了代码的最后一行,因为它确实改变了所有[1],只是在替换函数中添加了括号。 并且也逃避括号