检测字符串中的数字,Pi和e

时间:2017-04-08 19:48:21

标签: javascript regex

我有一个正则表达式/(-?.?\d+(\.\d{1,2})?))/g来捕获可以是负数,小数或正数的数字。我还希望能够捕获特殊符号,特别是πe

我尝试过:

  • /(-?.?\d+(\.\d{1,2})?)|πe)/g

如何将这两个符号捕获为234π243.1πe3π1e43e

等表达式

2 个答案:

答案 0 :(得分:1)

Here是一个正在运行的正则表达式,它捕获所有字符串中的数字,修饰符(当前为+ - 。)和特殊字符,并将其余部分留下。请注意,您的e可能会在文本中捕获无意的e。由于缺少其他测试用例,这是我能做的最好的。

[-+.]?[πe]?\d+[πe]?
  1. 第一部分是可选修饰符(来自该类,零次或多次)
  2. 和另一个可选的特殊字符类
  3. 您的数字,一次或多次
  4. 最终可选的特殊字符类,零次或多次。

答案 1 :(得分:1)

我假设您使用JS。

只需将此用于(负数):/-?(\d*.)?(\d+)/

这适用于您的符号:/[πe]/

现在我们将这两者结合起来匹配像234π2这样的倍数。

/((-?(\d*.)?(\d+))|([πe]))+/

修复

如Casimir et Hippolyte所指出的,该模式还匹配-1-1-1.1.1.1。解决这个问题:

第一部分仍然是数字或符号:/((-?(\d*\.)?\d+)|[πe])/

但不是简单地重复使用表达式,我们将使用一个不允许使用.1之类的符号或小数的新表达式:/(((\d+\.)?\d+)|[πe])/

放在一起:/((-?(\d*\.)?\d+)|[πe])(((\d+\.)?\d+)|[πe])*/

(我也删除了那些不必要的括号。)