我需要从字符串中删除某些特殊字符。 对于同样的使用
replace(/[()-/.]/gi, '');
这工作正常,但我意识到它也会删除'。*任何想法为什么? 如果我删除'。'从表达它的工作正常,所以我想这是在创造一些不确定的问题
答案 0 :(得分:2)
问题是在中间出现未转义的连字符。像这样:
replace(/[()\/.-]/gi, '');
当未转义的连字符出现在字符类的中间时,它将作为范围
)
是ascii 41 /
是ascii 47 *
是ascii 42因此你的正则表达式否定*
,因为-
会对41-47
答案 1 :(得分:2)
连字符需要转义,因为它在字符类中的位置。您也可以删除i
(不区分大小写)标记,但这不是必需的,因为您没有包含正确的字符。
/[()\-\/.]/g
注意:在字符类中,连字符具有特殊含义。您可以将其作为班级的第一个或最后一个角色。在某些正则表达式实现中,您也可以直接放在一个范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。