使用JavaScript提取字符串的特定部分

3
首先,我知道之前有很多类似的问题,但是对于正则表达式这个概念,我比较难理解,请尽量详细地解释一下。
我有一个字符串,它经常变化,格式为:TOKEN (SwapToken) - 1005.00000127 TOKEN。只有数字会发生变化,可能是1005.00000128或者1500.001等等。我已经写了一个程序进行提取,但是我需要仅仅提取出其中的数字,或者将数字提取出来放到另一个变量中。
因为数字可能会变化,所以代码是否也需要变化?如何才能仅仅提取出数字?除了使用正则表达式,还有其他好的方法吗?
谢谢!

你总是有破折号“-”吗?如果是这样,你可以在它上面分割,然后在TOKEN上分割。像这样:str.split('-')[1].split('TOKEN')[0].trim() - valin077
1
你可以使用:str.match(/[0-9.]+/)[0] - R. Schifini
你的字符串中是否总是包含点“.”?如果是,你可以使用正则表达式\d+\.\d+ - Egan Wolf
我会小心使用正则表达式/[0-9.]+/,因为它将匹配字符串中的所有数字而不仅仅是小数。因此,在ABC3中的3也会匹配。如果您确信您的字符串在所需数字之前没有任何数字,则可以使用。 - Khauri
1个回答

7

这里有一个简单的正则表达式:

/\d+\.\d+/g

虽然它对您的输入做出了一些假设,主要是没有其他内容看起来像小数。

\d 表示任何数字(0-9)
\. 表示字面上的点号(.)
+ 表示前一个字符出现一次或多次

你需要反斜杠,因为在正则表达式中,"." 表示匹配任何字符,所以必须转义它。

这个特定的正则表达式通过查找任何类似于一个或多个数字后跟 ".",再跟一个或多个数字的方式,找到任何类似于小数的东西。

let str = "TOKEN (SwapToken) - 1005.00000127 TOKEN"

let num = str.match(/\d+\.\d+/g)[0];

console.log(parseFloat(num))

这是一个可以测试正则表达式的网站。它具有一些很棒的功能,并且在右侧解释了你的正则表达式正在做什么。

https://regex101.com/r/8RuY3A/1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接