我正在尝试这个:
str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);
替换操作不起作用,我做错了什么?
更新: 我试图将字符串中的任何方括号删除,奇怪的是如果我执行
replace(/\[/g, '')
replace(/\]/g, '')
它有效,但是
replace(/\[\]/g, '');
不行。
我正在尝试这个:
str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);
替换操作不起作用,我做错了什么?
更新: 我试图将字符串中的任何方括号删除,奇怪的是如果我执行
replace(/\[/g, '')
replace(/\]/g, '')
它有效,但是
replace(/\[\]/g, '');
不行。
它应该是这样的:
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
请注意这不匹配开/关括号的数量,只是删除所有连续的开/闭括号。此外,如果连续的括号之间有分隔符(空格等),它也不会匹配。
您需要转义括号,例如\[
和\]
。请查看http://regexpal.com/。它非常有用 :)
要替换字符串中的所有括号,可以使用以下方法:
str.replace(/\[|\]/g,'');
这是一个微不足道的例子,但对我很有用。您需要转义每个方括号,然后将这些方括号包含在一个方括号表达式中以捕获所有实例。
const stringWithBrackets = '[]]][[]]testing][[]][';
const stringWithReplacedBrackets = stringWithBrackets.replace(/[\[\]]/g, '');
console.log(stringWithReplacedBrackets);
两个反斜杠会产生一个反斜杠,所以你要搜索的是“一个反斜杠,后面跟着一个由1
或右括号
组成的字符类,然后你缺少了一个闭合括号。
试试这样:
str.replace(/\[1\]/g, '');
你想要匹配什么内容?
如果你不转义括号,它们会被视为字符类。例如:
/[1\\]/
匹配1或反斜杠。您可能只想用一个反斜杠进行转义:
/\[1\]/
但是这也不匹配,因为你的字符串中没有[1]
。
没有人能够简单而正确地解释:
str.replace(/[[\]]/g, '');
以下方案如何?
str = "bla [bla]";
str.replace(/[[\\]]/g,'');
你可以创建一个只包含你感兴趣的两个字符的字符集,并进行全局替换。
在处理需要特殊字符验证的密码时,我偶然遇到了这个问题,即“字符类内部的方括号转义”。
请注意双重转义:
var regex = new RegExp('[\\]]');
正如@rudu所提到的,此表达式位于字符串中,因此必须进行双重转义。请注意,引用类型(单引号/双引号)在此处不相关。
下面是一个使用字符类中的方括号测试我键盘上所有特殊字符的示例:
var regex = new RegExp('[-,_,\',",;,:,!,@,#,$,%,^,&,*,(,),[,\\],\?,{,},|,+,=,<,>,~,`,\\\\,\,,\/,.]', 'g')
str.replace(/[\[\]]/g, '')
即可。 - Pointy[[[
? - ilyo