替换功能如何以不同的方式工作?

时间:2017-04-11 23:38:34

标签: javascript replace

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

string = string.replace(/[^a-zA-Z0-9]/g, '');

这是我在网上找到的代码。我对此感到困惑。为什么第一行代码“排除”特殊字符,而第二行只包含那些仅在[]中的字符。这两个功能都是“替换”,那么他们为什么要做完全相反的工作。

2 个答案:

答案 0 :(得分:2)

第一个正则表达式说:如果找到这些字符中的任何一个,则替换它们。

第二个正则表达式说:如果您发现此处未列出任何字符,请将其替换为空。

[]匹配除x,y或z之外的任何内容。关键区别是'^',当它是none中的第一个字符时,意味着不匹配!

这是一个解释character classes and negated character classes的好链接。

答案 1 :(得分:2)

原因是插入符号(^)在开放括号后直接出现时具有特殊含义。它意味着“不是以下”,所以当它用于替换时,它将替换除括号中的内容之外的所有内容。

有关更有说服力的解释,请参阅this SO answer

第一个示例在左括号后没有插入符号,因此它将排除这些括号内的任何内容。