[英]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.