我正在尝试使用javaScript的.replace函数替换字符串中的方括号,但它不起作用。我的代码:
var str = document.getElementById('string-input-field').value;
str = str.replace(/[/g, '[').replace(/]/g, ']');
奇怪的是,它没有给出任何错误,而是替换[和]它只替换了几个字母。例如,如果我试试这个:
var str = 'abcdefghijklmnopqrstuvwxyz';
str = str.replace(/[/g, '6').replace(/]/g, '6');
我得到'6b6d6f6hijk6mno6q6stuvwxyz'。所以字母表'a c e g l p r'正在被替换。此外,我尝试将变量设置为一个简单的字符串,如上所述,并通过从输入字段获取值,但仍然是同样的问题。
请让我知道什么是错的,或者如果有任何其他方式我可以达到同样的目的。
聚苯乙烯。我正在使用localhost,这个页面正在加载到Wordpress的管理区域(post.php - 编辑页面)。
更新
在@ p.s.w.g回答后我尝试了以下内容:
str = 'aaaaa[bbbbbb]ccccc';
str = str.replace(/\[/g, '[').replace(/]/g, ']');
我得到同样的回报:aaaaa [bbbbbb] ccccc。然而,旧问题已经解决,如@ p.s.w.g所说。有什么想法吗?
答案 0 :(得分:3)
[
是正则表达式中的一个特殊字符,它开始一个字符类,一直持续到遇到]
。解析器将所有[/g, '6').replace(/]
视为字符类。字符类将匹配任何字符(或括号内指定的字符范围。在这种情况下,这意味着任何/
,g
,(空格),'
,6
,)
,.
,r
,e
,p
,l
,a
,c
或(
,角色。
尝试像这样转义[
字符(请注意,没有必要转义]
,因为它不是特殊字符,除非它是字符类的一部分):
str = str.replace(/\[/g, '[').replace(/]/g, ']');
例如:
var str = "[foo] [bar]";
str = str.replace(/\[/g, '[').replace(/]/g, ']');
console.log(str); // "[foo] [bar]"
关于您的更新,您使用的任何工具都可以将[
和]
静默转换回[
和]
。如果是这种情况,您可能还想逃避&
以避免这种情况:
str = str.replace(/\[/g, '[').replace(/]/g, ']');
但是在其他情况下这可能会崩溃,使用这样的替换方法可能会更好:
str = str.replace(/\[|]/g, function(c) {
return '&#' + c.charCodeAt(0) + ';'
});