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

时间:2017-06-02 05:44:55

标签: 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@#

我想知道为什么'@'不会被上面的正则表达式替换。

相同的行为是字符 - underScore,question-Mark,Angular bracket。

请指导。

谢谢,

Vibhav

3 个答案:

答案 0 :(得分:2)

在原始正则表达式中,短划线(连字符)被解释为范围:

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

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

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

答案 1 :(得分:0)

你的reg-ex中的一些错误你必须把 - ' - '在charachter课堂前(或最后)。

在reg-ex下面会做到这一点

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

您可以使用http://www.regexpal.com/等在线测试人员查看正则表达式

答案 2 :(得分:0)

连字符将被视为范围,因此您需要为其添加转义序列。

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