繁体   English   中英

使用javascript正则表达式解析单位

[英]Parsing units with javascript regex

假设我有一个字符串,其中包含我想要分成单个单元的一些单元(可能有也可能没有前缀)。 例如,字符串可以包含“Btu(th)”或“Btu(th).ft”或甚至“mBtu(th).ft”,其中mBtu(th)是标准化单位毫升热化学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 

单词边界不会分隔两个非单词字符。 因此,您实际上并不需要单词边界,因为括号和句点不是有效的单词字符。 相反,您希望字符串后面没有单词字符,因此您可以使用它:

[mk]??(Btu\(th\)|ft|m)(?!\w)

演示

我相信你是在追求这样的事情。 如果我理解你正确想要匹配任何类型的元素,可能在mk字符之前,并用parantheses或点分隔。

/[\s\.\(]*(m|k?)(\w+)[\s\.\)]*/g

https://regex101.com/r/eQ5nR4/2

如果你不关心是否能够匹配括号,只需返回你可以做的元素

/(m|k?)(\w+)/g

https://regex101.com/r/oC1eP5/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM