【问题标题】:How to translate a negative lookbehind to an ES5 compatible expression [duplicate]如何将否定的lookbehind转换为ES5兼容的表达式[重复]
【发布时间】:2019-05-20 12:25:42
【问题描述】:

我制作了一个在我的代码中可以正常运行的 RegExp,但它只与 ES2018 兼容,因为它使用了否定的后视。一个库正在使用 RegExp 函数,所以我无法更改 RegExp 的使用方式。

我尝试在开头放置一个非捕获组以查找“不是”字符,但在我测试时它的工作方式不同。

/((?<![\^+-])[0-9]+)/g

在运行我的测试套件时,/(?:[^^+-])([0-9]+)/g 这样的正则表达式无法通过测试,因为它们包含前面的字符。

【问题讨论】:

  • 您是如何实现该模式的——您对匹配项做了什么?你能发布Javascript代码吗?
  • @CertainPerformance /((?&lt;![\^+-])[0-9]+)/g 用于匹配[Cu(NH3)6]^+6_3(H2O)^+5_12 中的元素或组计数。
  • @CertainPerformance 我已经检查了this thread 中给出的解决方案。 Here 是我的代码的上下文。如前所述,我正在将代码输入另一个库,所以很遗憾我不能使用反转方法。
  • 您应该在问题本身中发布所有相关的 Javascript 代码(如在第一条评论中)。如果您无法更改正则表达式的使用方式(并且仅提取完整匹配项),那么您正在寻找的内容是不可能的。我希望更改 Token 函数

标签: javascript regex regex-lookarounds


【解决方案1】:

否定的lookbehind在开始时匹配,所以:

/(?:[^^+-]|^)([0-9]+)/g

【讨论】:

  • '[Cu(NH3)6]^+6_3(H2O)^+5_12'.match(/(?:[^^+-]|^)([0-9]+)/g) 仍然捕获前面的字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多