繁体   English   中英

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

[英]How can I put [] (square brackets) in RegExp javascript?

我正在尝试这个:

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);

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

注意双重转义:

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

作为@rudu提到,这种表达一个字符串中,因此必须进行双重转义。 请注意,引用类型(单/双)在这里不相关。

这里是一个字符类,对所有特殊字符的测试我的键盘上找到的用方括号的例子:

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

以下情况如何?

str = "bla [bla]";

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

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

两个反斜杠产生一个反斜杠,因此您正在搜索“一个反斜杠,后跟由1right bracket组成的字符类,然后您缺少一个right bracket括号。

尝试

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

你到底想匹配什么?

如果您不转义括号,它们将被视为字符类。 这个:

/[1\\]/

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

/\[1\]/

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM