我正在尝试这个:
str = "bla [bla]";
str = str.replace(/\\[\\]/g,"");
console.log(str);
替换不起作用,我做错了什么?
UPDATE :我正在尝试删除字符串中的任何方括号, 奇怪的是,如果我做的话
replace(/\[/g, '')
replace(/\]/g, '')
它有效,但是
replace(/\[\]/g, '');
没有。
答案 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)
两个反斜杠产生一个反斜杠,所以你要搜索“反斜杠,然后是一个由1
或right 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, '');
注意使用字符类,左括号没有转义,右括号有一个反斜杠转义。