如何在RegEx javascript中放置[](方括号)?

时间:2011-07-28 17:24:01

标签: javascript regex

我正在尝试这个:

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

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

UPDATE :我正在尝试删除字符串中的任何方括号, 奇怪的是,如果我做的话

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

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

8 个答案:

答案 0 :(得分:44)

应该是:

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

请注意,这与打开/关闭数量不匹配,只需删除所有顺序打开和关闭。此外,如果顺序括号具有分隔符(空格等),则它将不匹配。

答案 1 :(得分:2)

您必须撤消括号,例如\[\]。查看http://regexpal.com/。这非常有用:)

要替换字符串中的所有括号,这应该可以完成工作:

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

我希望这会有所帮助 赫里斯托斯

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

两个反斜杠产生一个反斜杠,所以你要搜索“反斜杠,然后是一个由1right bracket组成的字符类,然后你错过了一个结束括号

尝试

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

答案 4 :(得分:0)

你到底想要匹配什么?

如果不转义括号,则将它们视为字符类。这样:

/[1\\]/

匹配1或反斜杠。您可能只想用一个反斜杠来逃避它们:

/\[1\]/

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

答案 5 :(得分:0)

在处理字符类中的方括号转义时,我偶然发现了这个问题,该字符类设计用于需要特殊字符的密码验证。

请注意两次转义:

  

inkscape:

正如@rudu提到的,此表达式 在字符串中,因此必须进行两次转义。请注意,这里的引用类型(单/双)无关。

以下是在字符类中使用方括号的示例,该方括号用于测试在 my 键盘上找到的所有特殊字符:

sodipodi:

答案 6 :(得分:0)

下面的怎么样?

str = "bla [bla]";

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

您只使用您感兴趣的两个字符创建一个字符集并进行全局替换。

答案 7 :(得分:0)

没有人让它变得简单和正确:

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

注意使用字符类,左括号没有转义,右括号有一个反斜杠转义。