簡體   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