js 如何转换一大堆特殊符号为纯数字?

比如这样一堆字符

~Yd.a.D7L`-WI=:3D7t=K8BlX|[7\j]}Ou}'O0JptRY^0F3Z6Z/|au^r6?nqOl47U$oPm?-o"aB`FXbu^=Y>9v/'(n=,8FIky9'joXxnD%F82a_sg_hD}g|;R`<tIOu-cp;MB8v2$9xC"UFkhu7mz\D(4-rr%R;RuHnZ`x-r0^7F=2(nO;,x*l,Io`"${:pw$~X>8]k+WE-hW{&aKfTPOKPS`EKx{"0\dMJi.oNTC{ml3K}kf>Vw#UyYUy]m`b"0pXQ#9oirZ[J^0DoPiR*"__p9c<|_fGBB'vj]W#w~XPz7K=9rUF@mz%p[[8Ys(LNajwDnO;e)=OP!9kd}\b!S"S/$Y7<fG:TS

因为里面包含了 ` " ' 等等符号

直接用 replace(/[^\d.]/g, '') 会提示报错

阅读 908
avatarAI BotBETA

这个问题可以通过使用 JavaScript 中的 replace 函数和正则表达式来解决。你提到的正则表达式 [^\d.] 是用来匹配所有非数字和非点字符的。这个表达式中的 ^ 表示“非”的意思,\d 表示数字,. 表示点。所以,这个正则表达式表示的是“匹配所有非数字和非点字符”。

由于你的输入字符串中包含了很多特殊字符,你需要将它们替换为空字符串,即删除这些字符。这可以通过在 replace 函数中传入一个空字符串来实现。下面是完成这个任务的代码:

var input = "~Yd.a.D7L`-WI=:3D7t=K8BlX|[7\\j]}Ou}'O0JptRY^0F3Z6Z/|au^r6?nqOl47U$oPm?-o'aB`FXbu^=Y>9v/'(n=,8FIky9'joXxnD%F82a_sg_hD}g|;R`<tIOu-cp;MB8v2$9xC'UFkhu7mz\\D(4-rr%R;RuHnZ`x-r0^7F=2(nO;,x*l,Io`'${:pw$~X>8]k+WE-hW{&aKfTPOKPS`EKx{'0\\dMJi.oNTC{ml3K}kf>Vw#UyYUy]m`b'0pXQ#9oirZ[J^0DoPiR*'__p9c<|_fGBB'vj]W#w~XPz7K=9rUF@mz%p[[8Ys(LNajwDnO;e)=OP!9kd}\\b!S'S/$Y7<fG:TS";
var result = input.replace(/[^\d.]/g, '');
console.log(result);

这段代码将打印出所有的特殊字符都被替换为空字符串的字符串。注意,由于你的输入字符串中包含了一些特殊字符,这段代码可能会报错。这是因为这些特殊字符在正则表达式中被视为转义字符,所以你需要使用两个反斜杠(\\)来代表一个反斜杠。对于点字符,你也需要使用两个反斜杠。

3 个回答

如果你的字符串内容是贴出来的那个,直接 replace(/[^\d.]/g, '') 是不会报错的,结果是..737870036647989828297407280.3090979897

你那边报错是报的啥?

如果是因为转义的问题,转义的结果是

'~Yd.a.D7L`-WI=:3D7t=K8BlX|[7\\j]}Ou}\'O0JptRY^0F3Z6Z/|au^r6?nqOl47U$oPm?-o"aB`FXbu^=Y>9v/\'(n=,8FIky9\'joXxnD%F82a_sg_hD}g|;R`<tIOu-cp;MB8v2$9xC"UFkhu7mz\\D(4-rr%R;RuHnZ`x-r0^7F=2(nO;,x*l,Io`"${:pw$~X>8]k+WE-hW{&aKfTPOKPS`EKx{"0\\dMJi.oNTC{ml3K}kf>Vw#UyYUy]m`b"0pXQ#9oirZ[J^0DoPiR*"__p9c<|_fGBB\'vj]W#w~XPz7K=9rUF@mz%p[[8Ys(LNajwDnO;e)=OP!9kd}\\b!S"S/$Y7<fG:TS'

要得到转义的字符串方法比较多,比如

  1. 做个 TextArea 把字符串粘贴进去再用脚本取出来
  2. localStorage.setItem("xxx", "") 产生一个值,在 DevTools 里去粘贴替换值,再用 localStorage.getItem("xxx") 取出来
  3. …… 诸如此类的方法还很多

不知道这个字符串哪里来的, 报错是因为字符串中有引号, 在定义变量储存就会直接报错了因为是这样的:
image.png
因为语法要求引号成对出现在字符两边就是字符串了

解决就需要在OP给的字符中的引号前面加转义字符/, 这样就不会被识别为字符串的关键符号了, 而被识别为单纯的引号

找一个 dom 丢进去,然后通过 textContent 的形式取出来:
下面是我取元素获得内容

'~Yd.a.D7L`-WI=:3D7t=K8BlX|[7\\j]}Ou}\'O0JptRY^0F3Z6Z/|au^r6?nqOl47U$oPm?-o"aB`FXbu^=Y>9v/\'(n=,8FIky9\'joXxnD%F82a_sg_hD}g|;R`<tIOu-cp;MB8v2$9xC"UFkhu7mz\\D(4-rr%R;RuHnZ`x-r0^7F=2(nO;,x*l,Io`"${:pw$~X>8]k+WE-hW{&aKfTPOKPS`EKx{"0\\dMJi.oNTC{ml3K}kf>Vw#UyYUy]m`b"0pXQ#9oirZ[J^0DoPiR*"__p9c<|_fGBB\'vj]W#w~XPz7K=9rUF@mz%p[[8Ys(LNajwDnO;e)=OP!9kd}\\b!S"S/$Y7<fG:TS'.replace(/[^\d]/ig, '')

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