我正在尝试使用 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”正在被替换。我还尝试将变量设置为简单的字符串,如上面所示,并通过从输入字段获取值,但仍然是同样的问题。
请让我知道出了什么问题,或者是否有其他方法可以实现同样的目标。
诗。我正在本地主机上工作,并且此页面正在 WordPress 的管理区域中加载(post.php - 编辑页面)。
更新
我在 @p.s.w.g 回答后尝试了以下操作:
str = 'aaaaa[bbbbbb]ccccc';
str = str.replace(/\[/g, '[').replace(/]/g, ']');
我得到了同样的回复:aaaaa[bbbbbb]ccccc。然而,老问题已经解决,就像 @p.s.w.g 所说的那样。有什么想法吗?
最佳答案
[
是正则表达式中的一个特殊字符,它开始一个字符类,一直持续到遇到 ]
。解析器将所有 [/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, '&#91;').replace(/]/g, '&#93;');
但在其他情况下这可能会失败,最好使用如下替换方法:
str = str.replace(/\[|]/g, function(c) {
return '&#' + c.charCodeAt(0) + ';'
});
关于javascript - string.replace() 与 global (g) 不以奇怪的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316948/