如何从“ 1823917 + 3”之类的字符串中提取整数/浮点数和符号?

时间:2019-09-05 09:50:51

标签: javascript regex

我接收到类似“ 5 + 3”或“ 98171982739187.3 / 2.1”的字符串,并且需要从该特定字符串和表达式中使用的符号中提取每个整数/浮点数。我不知道数字到底有多少,但是表达式总是采用 NumberSYMBOLNumber 的形式。

我试图进行Regex101研究。我可以得到数字,但不能得到数字。

我尝试了什么:

"5234234+323423.3".match(/\d/g)

我想要实现的目标:

“ 5123123”

“ +”

“ 31.91123”

表达式中接受的符号:“ +-* /。(小数点)” 没有使用符号。

2 个答案:

答案 0 :(得分:0)

您可以指定符号列表或要捕获的数字。

\d+(\.\d+)?的目标是自然数或十进制值(请注意,1.将被捕获为1

解决方案:

console.log(
  "5234234+323423.3".match(/\+|\-|\*|\/|\d+(\.\d+)?/g)
)

使用多个值进行测试:

const values = [
 "12",
 "12.21*122.2222222",
 "123+321-1.12*7/3.91"
]

const res = values.map(value=>value.match(/\+|\-|\*|\/|\d+(\.\d+)?/g));
console.log(res);

答案 1 :(得分:0)

将NUMBER视为“某些数字后可能带有点和更多数字”

将SYMBOL视为“ +”或“-”或“ /”或“ *”

您可以使用以下正则表达式:

(\d+(?:\.\d+)?)(\+|\-|\/|\*)(\d+(?:\.\d+)?)

您在那里有3个捕获组:

  1. (\d+(?:\.\d+)?)-NUMBER
  2. (\+|\-|\/|\*)-符号
  3. (\d+(?:\.\d+)?)-NUMBER

请注意1和3之间的非捕获组,例如(?:...)

演示:https://regex101.com/r/axSr7m/1