我接收到类似“ 5 + 3”或“ 98171982739187.3 / 2.1”的字符串,并且需要从该特定字符串和表达式中使用的符号中提取每个整数/浮点数。我不知道数字到底有多少,但是表达式总是采用 NumberSYMBOLNumber 的形式。
我试图进行Regex101研究。我可以得到数字,但不能得到数字。
我尝试了什么:
"5234234+323423.3".match(/\d/g)
我想要实现的目标:
“ 5123123”
“ +”
“ 31.91123”
表达式中接受的符号:“ +-* /。(小数点)” 没有使用符号。
答案 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个捕获组:
(\d+(?:\.\d+)?)
-NUMBER (\+|\-|\/|\*)
-符号(\d+(?:\.\d+)?)
-NUMBER 请注意1和3之间的非捕获组,例如(?:...)