簡體   English   中英

Javascript 字符之間單詞的正則表達式

[英]Javascript regex for words between characters

正如標題所述,我嘗試為%George%<Croissant>|2|10.3$制作正則表達式

關鍵是它必須只匹配兩個%之間的名稱和兩個<>之間的產品,然后是|之間的數字。

但是,如果名稱不是以大寫字母開頭且后跟小寫字母,則它是無效的,因此不匹配。 我制作的正則表達式是:

/%(?<name>[AZ][az]*)%<(?<product>[A-Za-z]*)>\|(?<quantity>(\d+))\|(?<price>(\d+\.\d*\$))/g

  • 這是匹配%George%<Croissant>|2|10.3$ (在 % 之間有專有名稱,% 以大寫字母開頭,后面跟着小寫字母),產品(產品在 < 和 > 之間) , 兩者之間的數字 | 和最終數字(這是最終數字,必須有 $ 才能有效)

  • 這與%InvalidName%<Croissant>|2|10.3$不匹配(因為名稱無效)

  • 這與%Peter%<Gum>1.3$不匹配(兩個 | 中都缺少數字,它必須有 2 個數字。

在 regex101 上測試,它只匹配%George%<Croissant>|2|10.3$

%Valid%<Valid>valid|10|valid20$也是有效的,因為它有一個專有名稱(1 個大寫字母后跟小寫字母,產品為 < Valid >,編號介於 | 10 | 之間,編號位於結束|有效20$

要匹配這兩種模式,您可以匹配可選的單詞字符\w*\| 在組quantity的 pipe 之前,並匹配組price之前沒有數字y>(\d+))的可選單詞字符。

要匹配這兩個價格,您必須將小數部分設為可選,因為您嘗試的模式需要至少 1 個或多個數字和一個使用\d+\.\d*的點

您還可以在數量上省略額外的捕獲組,因為數字已經在命名的捕獲組中。

%(?<name>[A-Z][a-z]*)%<(?<product>[A-Za-z]*)>\w*\|(?<quantity>\d+)\|[^\W\d]*(?<price>(\d+(?:\.\d+)?\$))

解釋

  • %(?<name>[AZ][az]*)% %的組name ,至少匹配一個大寫字符 AZ 和可選的小寫字符 az
  • <(?<product>[A-Za-z]*)> product組匹配可選字符 A-Za-z
  • \w*\| 匹配可選的單詞字符,然后匹配|
  • (?<quantity>(\d+))
  • \|[^\W\d]*匹配不帶數字的可選單詞字符(不超過數字)
  • (?<price>(\d+(?:\.\d+)?\$))組價,小數部分可選

正則表達式演示

試試這個

%(?<name>[A-Z][a-z]*?)%<(?<product>[A-Za-z]*)>[^|]*?\|(?<quantity>\d+)\|[^\d]*(?<price>\d+(?:\.\d+)*\$)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM