我正在尝试这个:
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(不匹配)。Using.*
表示方括号之间的任何值。
新的 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);
两个反斜杠产生一个反斜杠,因此您正在搜索“一个反斜杠,后跟由 a1
或 a组成的字符类right bracket
,然后您缺少一个右括号。
尝试
str.replace(/\[1\]/g, '');
你到底想匹配什么?
如果您不转义括号,它们将被视为字符类。这:
/[1\\]/
匹配 1 或反斜杠。您可能只想用一个反斜杠来转义它们:
/\[1\]/
但这也不匹配,因为您[1]
的字符串中没有 a 。