【问题标题】:JavaScript regex not replacing '@' characterJavaScript 正则表达式不替换“@”字符
【发布时间】:2017-11-03 10:24:30
【问题描述】:

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

要求 - 将每个字符替换为 NOT FROM BELOW LIST-

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

请在下面找到我的代码 -

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

str 的各种值的输出是 -

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

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

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

请指导。

谢谢,

Vibhav

【问题讨论】:

  • 就像在 A-Z 中一样,.-[ 中的破折号正在创建一系列字符

标签: javascript regex regex-negation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的正则表达式中有几个错误,您必须在字符类(或最后)前面加上“-”。

    下面的正则表达式就可以了

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-21
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 2010-11-12
        • 2016-09-23
        相关资源
        最近更新 更多