【问题标题】:Regex match with 3 condition?正则表达式匹配3个条件?
【发布时间】:2016-08-29 07:41:30
【问题描述】:

我将创建数学程序。如果我想解决我需要使用正则表达式分离方程。 例如:

     `10x-10y2+100x-100k=100`   

格式将用正则表达式output: "10x" ,"100x" ,"100k" ,"10y2","100"分隔

我已经用单独的匹配函数编写了代码

有:

           for num[a-z]num : ` /([\-+])?\s*(\d+)?([a-z]?(\d+))/g`
           for num[a-z]    : ` /([\-+])?\s*(\d+)?([a-z]?(\d+))/g`
           fon num         : `/\b[+-]?[\d]+\b/g`

我需要一个正则表达式匹配函数中的所有这三个匹配函数。有人帮助将代码与单个正则表达式组合起来

注意:我只需要匹配函数而不是拆分,因为我将该正则表达式应用于解析器

谢谢。

【问题讨论】:

  • 为什么-10y2 永远是一个有效的输入?
  • 前 2 个正则表达式看起来完全一样。请记住,您始终可以将每个正则表达式“或”在一起:/([\-+])?\s*(\d+)?([a-z]?(\d+))|\b[+-]?[\d]+\b/g,如果可能,它将匹配第一个正则表达式,然后是第二个,依此类推。
  • @Whothehellisthat a its vaild input
  • 哦。我对代数很熟悉,但我从未见过 -10 * y * 2 的用途。也许这不是它的工作原理。如果你把它拼出来是什么意思?
  • 我的意思是-10y^2 电源2

标签: javascript regex string match


【解决方案1】:

按符号拆分:

"10x-10y2+100x-100k=100".split(/[-+=]/);

输出:

["10x", "10y2", "100x", "100k", "100"]

如果您需要使用match() 方法,我建议使用相同的方法:

"10x-10y2+100x-100k=100".match(/[^-+=]+/g);

输出是一样的。

【讨论】:

  • 我需要匹配函数而不是拆分,因为我将该正则表达式应用于解析器
  • 不像那样..只匹配格式。比如10z --> num[a-z]
  • 那么您可能想要使用 Daniel 和 hsz 的另外两个答案。
【解决方案2】:

/(?:0|[1-9]\d*)?(?:[a-z]+)?(?:\^(?:0|[1-9]\d*))?/g

// finds:
//        vvv vvvvv vvvv vvvv vvvvv vv vvv       v vvv
          10x-10y^2+100x-100k=100^4+xy+100+100y2+0-1^0
// doesn't find:                           ^^^^^
  • (?:0|[1-9]\d*)? 0,或 1-9,然后是零个或多个数字。可选。
  • (?:[a-z]+)? 可选的一个或多个小写字母。
  • (?:\^[1-9]\d*)? 可选电源。
    • \^ 文字。
    • (?:0|[1-9]\d*) 零,或 1-9,然后是零个或多个数字。

如果我遗漏了任何内容,请告诉我,我会加以补充。

【讨论】:

    【解决方案3】:

    只需尝试以下正则表达式:

    /(\d+[a-z]?\d*)/g
    

    example

    【讨论】:

      【解决方案4】:

      试试这个:

       s.match(/\d+([A-Za-z]\d*)?/g)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多