JavaScript 正则表达式不替换 '@' 字符

标签 javascript regex regex-negation

我是 JavaScipt 新手,正在测试正则表达式,并且正在处理以下用例 -

要求 - 将不在下面列表中的每个字符替换为“#”-

  • 数量
  • 字符(大写或小写)
  • 除 -> 逗号、点、方括号、正斜杠、单引号之外的任何特殊字符

请在下面找到我的代码 -

    var replacedStr = str.replace(/[^a-zA-Z0-9'.-\[\], ]/g,"#");

str 的各种值的输出是 -

   str = "hello_";
   replacedStr is hello#
   _______________________
   str = "hello@_";
   replacedStr is hello@#

我想知道为什么上面的正则表达式没有替换“@”。

字符的行为相同 - 下划线、问号、尖括号。

请指导。

谢谢

维巴夫

最佳答案

在您的原始正则表达式中,您的破折号(连字符)被解释为范围:

[^a-zA-Z0-9'.-\[\], ]

这被解释为从点 . 到左括号 [ 的字符范围,其中包括 at 符号。如果将连字符移至否定字符类的最末尾,则正则表达式将按预期工作:

str = "hello@_";
str = str.replace(/[^a-zA-Z0-9'.\[\], -]/g,"#");
console.log(str);

关于JavaScript 正则表达式不替换 '@' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44321620/

相关文章:

javascript - 将 jQuery 延迟 Promise 转换为原生 JavaScript Promise

php - 正则表达式查找以@ php开头的用户名

javascript - 逗号分隔的有效手机号码的正则表达式

javascript - javascript 中的正则表达式只允许数字和一个点后跟最多 2 个数字

javascript - 可编辑的 HTML 表格

javascript - 无法在 jquery 的 div 中显示 ul li 的计数

javascript - e.offsetWidth 返回错误值

多个缓冲区上的 C++ 正则表达式

java - 特定字符串的正则表达式反向匹配?

正则表达式对组中的单词进行否定检查