如何在JavaScript正则表达式中使用方括号 []?

38

我正在尝试这个:

str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);

替换操作不起作用,我做错了什么?

更新: 我试图将字符串中的任何方括号删除,奇怪的是如果我执行

replace(/\[/g, '')
replace(/\]/g, '')

它有效,但是
replace(/\[\]/g, '');
不行。

8个回答

56

它应该是这样的:

str = str.replace(/\[.*?\]/g,"");

因为这是一个正则表达式语句,而不是 字符串,所以您不需要双反斜杠(\)。如果您从字符串构建正则表达式,则需要双反斜杠 ;)。

它还会字面解释1(不匹配)。使用 .* 表示方括号中的任何值。

新的 RegExp 字符串构建版本将是:

str=str.replace(new RegExp("\\[.*?\\]","g"),"");

更新:仅删除方括号的方法如下:

str = str.replace(/\[(.*?)\]/g,"$1");

您上面的代码无法工作,因为它试图顺序匹配 "[]" (两个方括号之间不允许有任何内容)。我们可以通过非贪婪组匹配 ((.*?)) 方括号内的内容,并使用反向引用 ($1) 进行替换来解决这个问题。

更新2:要删除多个方括号

str = str.replace(/\[+(.*?)\]+/g,"$1");
// bla [bla] [[blaa]] -> bla bla blaa
// bla [bla] [[[blaa] -> bla bla blaa

请注意这不匹配开/关括号的数量,只是删除所有连续的开/闭括号。此外,如果连续的括号之间有分隔符(空格等),它也不会匹配。


7
你的解决方案无法移除所有括号,因为其中有贪婪的“.*”。不过其实你根本不需要它 - 只需使用 str.replace(/[\[\]]/g, '') 即可。 - Pointy
@Rudu 如果我有多个开放和关闭括号,这还有效吗?比如说 [[[ - ilyo

7

您需要转义括号,例如\[\]。请查看http://regexpal.com/。它非常有用 :)

要替换字符串中的所有括号,可以使用以下方法:

str.replace(/\[|\]/g,'');

我希望这能有所帮助。
Hristo

这对我来说是最好的选择,因为我的输入字符串中有多个方括号。简单而通用。谢谢! - Akshay Maldhure

1

这是一个微不足道的例子,但对我很有用。您需要转义每个方括号,然后将这些方括号包含在一个方括号表达式中以捕获所有实例。

const stringWithBrackets = '[]]][[]]testing][[]][';
const stringWithReplacedBrackets = stringWithBrackets.replace(/[\[\]]/g, '');
console.log(stringWithReplacedBrackets);


这并没有回答问题。问题是要从字符串中删除所有方括号。 - AC101
你说得对,很抱歉我错过了原帖的最新更新。我会相应地修改我的回答。 - Kevin

0

两个反斜杠会产生一个反斜杠,所以你要搜索的是“一个反斜杠,后面跟着一个由1右括号组成的字符类,然后你缺少了一个闭合括号。

试试这样:

str.replace(/\[1\]/g, '');

0

你想要匹配什么内容?

如果你不转义括号,它们会被视为字符类。例如:

/[1\\]/

匹配1或反斜杠。您可能只想用一个反斜杠进行转义:

/\[1\]/

但是这也不匹配,因为你的字符串中没有[1]


0

没有人能够简单而正确地解释:

str.replace(/[[\]]/g, '');

注意字符类的使用,开放括号没有转义,闭合括号只有一个反斜线的转义。

0

以下方案如何?

str = "bla [bla]";

str.replace(/[[\\]]/g,'');

你可以创建一个只包含你感兴趣的两个字符的字符集,并进行全局替换。


0

在处理需要特殊字符验证的密码时,我偶然遇到了这个问题,即“字符类内部的方括号转义”。

请注意双重转义:

var regex = new RegExp('[\\]]');

正如@rudu所提到的,此表达式位于字符串中,因此必须进行双重转义。请注意,引用类型(单引号/双引号)在此处不相关。

下面是一个使用字符类中的方括号测试我键盘上所有特殊字符的示例:

var regex = new RegExp('[-,_,\',",;,:,!,@,#,$,%,^,&,*,(,),[,\\],\?,{,},|,+,=,<,>,~,`,\\\\,\,,\/,.]', 'g')

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