用正则表达式匹配每输入两个十六位进制加一个横杠'-',能同时也可以粘贴实现匹配?

我写了一个正则表达式

 this.value.replace(/\s/g, '').replace(/\W/g, '').replace(/[^0-9a-fA-F]/g, '').replace(/([a-f0-9]{2})(?=[a-f0-9])/g, "$1" + "-");

实现了每输入两个十六进制字符后加一个"-",如图1图片描述

正常输入没问题,但是要是从txt文本中复制这串字符粘贴进input框,就会出现图2的错误图片描述

请教各位大神怎么解决粘贴时出现的问题

阅读 2.5k
1 个回答

这个应该不是你粘贴的问题,应该是你正则匹配的问题
你可以在console执行下这段代码

'12-34EDF5-67-A8'.replace(/\s/g,'').replace(/\W/g,'').replace(/[^0-9a-fA-F]/g,'').replace(/([a-f0-9]{2})(?=[a-f0-9])/g,'$1'+'-');

你会发现结果就是12-34EDF56-7A8,因为你正则中只匹配了小写a-f,没有匹配大写的A-F,所以并没有达到你想要的目的,你可以在最后一次替换中忽略大小写去匹配就可以了

replace(/([a-f0-9]{2})(?=[a-f0-9])/ig,'$1'+'-')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进