2014-10-17 97 views
0

我需要从字符串中删除某些特殊字符。 对于同正在使用使用正则表达式删除点删除*太

replace(/[()-/.]/gi, ''); 

这是工作正常,但我意识到,它还会删除“*”。任何想法,为什么? 如果我删除'。'从表达它的工作正常,所以我想这是造成一些问题,这是不确定的

回答

2

问题是出现在中间的未转义的连字符。使这样的:当一个未转义连字符显示在它作为一个范围内的字符类的中间

replace(/[()\/.-]/gi, ''); 

  • )是ASCII 41
  • /为ASCII 47
  • * ascii 42因此你的正则表达式否定*,因为-作用于范围中的所有字符41-47
2

连字符需要转义,因为它在字符类中的位置。您也可以删除i(不区分大小写)标志,因为您没有包含正确的字符,所以不需要。

/[()\-\/.]/g 

注:在字符类的连字符有特殊的意义。您可以将其作为课程的第一个或最后一个字符。在一些正则表达式实现中,你也可以直接放在范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。

+0

谢谢猜猜会有更多的概念深入挖掘 – noob 2014-10-17 15:32:46