string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
string = string.replace(/[^a-zA-Z0-9]/g, '');
这是我在网上找到的代码。我对此感到困惑。为什么第一行代码“排除”特殊字符,而第二行只包含那些仅在[]中的字符。这两个功能都是“替换”,那么他们为什么要做完全相反的工作。
答案 0 :(得分:2)
第一个正则表达式说:如果找到这些字符中的任何一个,则替换它们。
第二个正则表达式说:如果您发现此处未列出任何字符,请将其替换为空。
[]
匹配除x,y或z之外的任何内容。关键区别是'^',当它是none
中的第一个字符时,意味着不匹配!
答案 1 :(得分:2)
原因是插入符号(^
)在开放括号后直接出现时具有特殊含义。它意味着“不是以下”,所以当它用于替换时,它将替换除括号中的内容之外的所有内容。
有关更有说服力的解释,请参阅this SO answer
第一个示例在左括号后没有插入符号,因此它将排除这些括号内的任何内容。