gpt4 book ai didi

javascript - 使用 javascript 正则表达式解析单元

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:51 26 4
gpt4 key购买 nike

假设我有一个字符串,其中包含一些我想分解为单个单元的单元(可能有也可能没有前缀)。例如,该字符串可能包含“Btu(th)”或“Btu(th).ft”甚至“mBtu(th).ft”,其中 mBtu(th) 是 SCSS 单位毫热化学 BTU(这纯粹是一个示例) .

我目前有以下(简化的)正则表达式,但是对于“mBtu(th).ft”的情况它失败了:

/(m|k)??(Btu\(th\)|ft|m)(?:\b|\s|$)/g

目前,这无法正确检测“Btu(th)”结尾和“ft”开头之间的边界。我了解 javascript 正则表达式不支持回溯,那么如何准确解析字符串?

附加说明

  • 上述正则表达式围绕前缀和单位组进行了极大简化。前缀可以跨越多个字符,例如“Ki”,因此字符集不适合。
  • 希望每个组都将前缀匹配作为第 1 组,并将单位作为第 2 组,即对于“mBtu(th).ft”,第一个匹配项将是 ['m','Btu(th)'] 和匹配两个将是 ['','ft']。
  • 前缀匹配需要惰性匹配,这样字符串 'm' 将作为单位米而不是前缀 milli 进行匹配。同样,“mm”的匹配项需要是前缀 milli 和单位米。

最佳答案

我会尝试:

/((m)|(k)|(Btu(\(th\))?)|(ft)|(m)|(?:\.))+/g

至少在上面的示例中,它匹配所有合并到一个字符串中的单元。 DEMO

编辑

另一个尝试(DEMO):

/(?:(m)|(k)|(Btu)|(th)|(ft)|[\.\(\)])/g

这个再次只匹配一个部分,但如果你使用 $1、$2、$3、$4 等 (DEMO),你可以提取其他片段。它忽略 ., (, ) 字符。问题是计算适当的匹配组,但它在某种程度上起作用。

或者,如果您接受多个单独的匹配项,我认为简单的替代方法是:

/(m|k|Btu|th|ft)/g 

关于javascript - 使用 javascript 正则表达式解析单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31330090/

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