为什么这个正则会把大写字母和数字替换掉?

如题。
'231AFSf##s--- dsa\dfsfsd'.replace(/[#-\\]/g, '')
但是这个就不会:
'231AFSf##s--- dsa\dfsfsd'.replace(/[#\\]/g, '')

阅读 1.9k
2 个回答

因为[]里的-会被识别为范围标识,大写字母和数字的Unicode编码位置在#和\之间,你需要转义一下\-

'#'.charCodeAt()  // 35
'\\'.charCodeAt() // 92

'0'.charCodeAt() // 48
'9'.charCodeAt() // 57
'A'.charCodeAt() // 65
'Z'.charCodeAt() // 90

'a'.charCodeAt() // 97
'z'.charCodeAt() // 122

[]-是特殊字符,表示范围,比如a-z就代表所有小写字母。
[#-\]意味着unicode从35到92的所有字符,包含了数字(48-57)和大写字母(65-90)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进