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

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

这是我在网上找到的代码。我有点困惑。第一行代码如何“排除”特殊字符,而第二行仅包含那些仅在[]中的字符。这两种功能都是“替代”,那么他们如何做完全相反的工作。替换函数如何以不同的方式工作?

+1

它是一个正则表达式https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions – epascarello

+0

https://regexper.com/#%2F%5B%5Ea-zA- Z0-9%5D%2Fg和https://regexper.com/#%2F%5B%26%5C%2F%5C%5C%23%2C%2B()%24~%25.'%22%3A *%3F%3C%3E%7B%7D%5D%2Fg – epascarello

+0

将不同的参数传递给'.replace'。对于不同的输入来说,函数的返回值是不同的,这真令人惊讶吗?如果您不了解正则表达式,请查看http://regular-expressions.info/开始。 –

回答

2

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

第二个正则表达式说:如果您发现任何字符,这里没有列出,请将其替换为无。

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

这是一个很好的链接,它解释了character classes and negated character classes

2

原因是插入符号(^)在前括号后面有特殊含义。它的意思是“不是以下”,所以当它用于替换时,它将取代除括号内的所有内容外的所有内容。

对于一个更为雄辩的说明,请参阅this SO answer

第一个例子没有左括号后插入符号,所以它会排除那些括号内任何东西。

+0

谢谢你的解释。我真的搜索过这个,但并不满意。 Thanx清理它。 – Ash

相关问题