【问题标题】:Get integer number using regex in javascript在javascript中使用正则表达式获取整数
【发布时间】:2018-11-27 05:48:47
【问题描述】:

我正在尝试编写一个正则表达式来仅获取整数,例如 23、234、45 等,而不是选择带小数点的数字。

对于上下文:

我需要在一个更大的正则表达式中使用它来转换混合分数乳胶输入 例如:

5\frac{7}{8}

但它不应该选择乳胶如:

3.5\frac{7}{8}

我目前的正则表达式是:

(^(.*)(?!(\.))(.*))\\frac{([^{}]+(?:{(?:[^{}]+)}|))}{([^{}]+(?:{(?:[^{}]+)}|))}

但它适用于整数和十进制数。需要更改 group1 的正则表达式。

【问题讨论】:

标签: javascript regex integer latex


【解决方案1】:

也许这对你有用:

(?<!\d\.)\b(\d+)\\frac{([^{}]+(?:{(?:[^{}]+)}|))}{([^{}]+(?:{(?:[^{}]+)}|))}

它在\fraq 之前捕获一个整数表达式,除非它前面有一个数字和一个句号。

(?<!\d\.) This ensures the number isn't preceded by a digit followed by a full stop, i.e.
          the integer part of a floating.
\b        Must be at the start of a number (to make sure we don't get a match with the end
          of a multi digit number).
(\d+)     Captures the integer number
\\frac    Matches the string "\fraq"

其余的和你原来的表达一样。

See it here at regex101.

编辑

因为显然有些人仍然没有转移到真正的浏览器上,无论多么令人难以置信;) - 答案必须改为:

这取决于latex的语法,你能不能做到。
(因为我不知道,所以我一开始就不应该说什么;)

问题是,如果没有后视,你就不能在不匹配你感兴趣的表达式之外的字符的情况下做到这一点。在你的正则表达式示例中,你清楚地表明你希望能够匹配表达式不仅在开头一串串,也是在中间的。因此,我们需要能够分辨出我们匹配之前的部分不是十进制数的整数部分。现在,通过匹配来做到这一点不是问题。例如

(?:^|[^\d.])(\d+)\\frac{...

就像 Wiktor 在 cmets 中建议的那样,如果表达式在行首 (^) 将匹配,前面有一些不是小数点或数字的内容 ( [^\d.])。那应该这样做。 (Here at regex101.)

嗯,正如前面所指出的,这取决于乳胶的语法。如果两个表达式可以直接相邻,它们之间没有任何运算符或 stuff,那么(据我所知)你不能用 JS 正则表达式来做。考虑1\fraq{0}{1}2\fraq{2}{3}(我不知道它在语法上是否正确)。第一个表达式1\fraq{0}{1} 是小菜一碟。但是在匹配之后,我们需要在第二个表达式之前匹配一个字符以验证它不是以十进制数字开头,但是由于第一个表达式已经 ate 字符,我们不能。因为测试(?:^|[^\d.]) 验证我们的表达式不是以十进制数字开头,将匹配实际属于我们表达式的字符之一(2\fraq{2}{3} 中的2),从而使匹配失败,因为其余部分不是以满足正则表达式 (\d+)\\frac{... 其余部分所需的数字开头。

但是,如果一个表达式总是以测试字符串开头,或者前面有 and 运算符等,那么它应该可以使用

(?:^|[^\d.])(\d+)\\frac{([^{}]+(?:{(?:[^{}]+)})?)}{([^{}]+(?:{(?:[^{}]+)})?)}

Here at regex101.

(对不起,我的胡言乱语)

【讨论】:

  • RegEx 的负后向操作符仅在最近的 Chrome 版本中受支持。任何其他浏览器都不支持它。可以在不使用否定后向运算符的情况下以任何其他方式完成吗?
  • @gvgramazio 合理的向下(和向上)投票是 SO 的(必要的?)一部分,以提高答案的质量和率。但是,如果它们指出了否决票的原因,它们那么会更有用,因为这样回答者就有机会纠正/改进答案 (IMO)。
  • 我同意。事实上,我试图提出原因,不知道是不是真的,但肯定是可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多