gpt4 book ai didi

javascript - 如何在 javascript 中使用正则表达式来匹配数字和符号?

转载 作者:行者123 更新时间:2023-11-28 19:06:23 26 4
gpt4 key购买 nike

假设我有一个如下所示的字符串:

var str = "23*45+ 4*12"

如何使用正则表达式返回

["23","*","45","+","4","*","12"]

如何将小数和负数也包含在内?

var str1 = "45.3*23+(-4*5.8)

结果应如下所示:

["45.3","*","23","+","-4","*","5.8"]

请解释你的答案,因为我是正则表达式的新手。谢谢!

最佳答案

解决特定问题的最简单方法是按单词边界进行拆分:

$ node
> "23*45+ 4*12".split(/\b/)
[ '23', '*', '45', '+ ', '4', '*', '12' ]

正则表达式 /\b/ 描述 here .

现在既然你有空格,你可能应该 trim 每个结果:

$ node
> "23*45+ 4*12".split(/\b/).map(function (s) {return s.trim()})
[ '23', '*', '45', '+', '4', '*', '12' ]

现在,如果您只想捕获数字和算术运算符,您可能应该直接匹配它们,而不是依赖于拆分。匹配整数的正则表达式是

\d+

这是一个或多个数字,匹配运算符的正则表达式是

[=+/*]

请注意,我将破折号放在前面,因为如果它位于中间,它将是一个字符范围(例如 [a-z] 匹配 26 个字符,而 [-az] 仅匹配三个)。现在你可以这样做:

$ node
> "23*45+ 4*12".match(/[-+/*]|\d+/g)
[ '23', '*', '45', '+', '4', '*', '12' ]

g 是正则表达式的修饰符,表示获取所有匹配项(g 代表“全局”)。关于最后一种方法的一个有趣的事情是它会跳过不属于的字符,因此可能会发生这种情况:

$ node
> "23 * blah45 + 4*~~~~12".match(/[-+/*]|\d+/g)
[ '23', '*', '45', '+', '4', '*', '12' ]

现在假设您想要添加 float 。这些看起来像 22.807,即数字,然后是点,然后是更多数字。点在正则表达式中很特殊,所以我们必须这样写:\.。因此,要捕获可以是整数或浮点值的值,我们可以编写:

\d+(\.d+)?

其中 ? 表示可选。现在我们还可以添加一个可选的前导负号:

-?\d+(\.\d+)?

正如您从编程中知道的那样,我们喜欢写像 255.84E-19 这样的数字,这使我们能够:

-?\d+(\.\d+([Ee][+-]?\d+)?)?

带有可选的指数部分,包含大写或小写的 E,然后是可选的符号,然后是所需的指数数。

然后在“非捕获”上下文中括号会出现性能问题(这里很难解释),所以专业人士会这样写:

-?\d+(?:\.\d+(?:[Ee][+-]?\d+)?)?

你会得到所有的荣耀

$ node
> "23 * -99.45 + 4.2E7 * -12".match(/-?\d+(?:\.\d+(?:[Ee][+-]?\d+)?)?|[-+*/]/g)
[ '23', '*', '-99.45', '+', '4.2E7', '*', '-12' ]

这里发生了很多事情。抱歉陷得这么深。

顺便说一句,解析算术表达式并验证它们的一般问题无论如何都不能通过正则表达式来完成,但希望这个解释能让您开始。

关于javascript - 如何在 javascript 中使用正则表达式来匹配数字和符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com