javascript - string.replace() 与 global (g) 不以奇怪的方式工作

标签 javascript jquery regex wordpress replace

我正在尝试使用 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).replac(,字符。

尝试像这样转义 [ 字符(请注意,没有必要转义 ] 因为它不是特殊字符,除非它是字符类的一部分):

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, '&amp;#91;').replace(/]/g, '&amp;#93;');

但在其他情况下这可能会失败,最好使用如下替换方法:

str = str.replace(/\[|]/g, function(c) { 
    return '&#' + c.charCodeAt(0) + ';' 
});

关于javascript - string.replace() 与 global (g) 不以奇怪的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316948/

相关文章:

javascript - 如何执行名称为字符串的 JavaScript 函数

javascript - 仅当使用 jQuery 的 html() 内部存在 <img/> 标记时获取元素内部文本

javascript - 循环内的嵌套 ajax 调用未按顺序执行

javascript - 如何使用 Jquery 更改链接的 href 属性

regex - 在 Dart 中使用 RegExp 实现模式

javascript - 如何使用 “JavaScript enabled” 获取 HTML?

javascript - Date.toLocaleDateString() 不适用于 Nodejs v10.14.2

jquery - 如何使用 css 和 jquery 实现 100% -100px

javascript - 尝试匹配/测试完全合格的 sub.domain.com :1000 or 127. 0.0.1:1000

mysql - 如何在 MS sql 中显示类似于 11111 或类似的数字