在這種情況下,我為代碼、價格、名稱、狀態中的組創建了一個正則運算式,但最后一行不匹配,如果沒有單詞[Y],我想要狀態為 Y 的最后一行
Harga:
X25=2.335NAME1 25 [X];
X1=5.720NAME2 5 [Y];
X2=10.720NAME3 10 [Y];
X4=4.200NAME4 4;
(?<code>.*)\=(?<price>[0-9]{1,3}\.?[0-9]{1,3})(?<name>.*)\s(?:\[(?<status>X|Y)\])
uj5u.com熱心網友回復:
您可以將第.*一個更改為與任何字符匹配的否定字符類,除了=
名稱組可以更改為匹配除[和以外的任何字符的否定字符類]
使用[0-9]{1,3}\.?[0-9]{1,3}匹配至少 2 位數字。如果您還想匹配單個數字,則可以.將后面的 1-3 位數字設為可選
最后一部分可以是可選的,包括空格字符以匹配最后一行
(?<code>[^=\n]*)=(?<price>[0-9]{1,3}(?:\.[0-9]{1,3})?)(?<name>[^\][]*?)(?:\s*\[(?<status>[XY])\])?;
模式匹配:
(?<code>[^=\n]*)=組碼匹配除 之外的可選字符=,然后匹配=(?<price>團價[0-9]{1,3}(?:\.[0-9]{1,3})?匹配 1-3 位數字和可選的.1-3 位數字
)關閉群組(?<name>[^\][]*?)組名,可選地匹配任何字符,除了[并且]盡可能少(?:非捕獲組使整個部分可選\s*\[(?<status>[XY])\]可選匹配空白字符,組狀態匹配X或Y使用方括號之間的字符類
)?;關閉非捕獲組,并匹配;最后的
正則運算式演示
如果;末尾不是強制性的,但它也不能出現在兩者之間,您可以像在這個正則運算式演示中那樣排除匹配。
const regex = /(?<code>[^=\n]*)=(?<price>[0-9]{1,3}(?:\.[0-9]{1,3})?)(?<name>[^\][]*?)(?:\s*\[(?<status>[XY])\])?;/g;
const str = `Harga:
X25=2.335NAME1 25 [X];
X1=5.720NAME2 5 [Y];
X2=10.720NAME3 10 [Y];
X4=4.200NAME4 4;`;
let m;
console.log([...str.matchAll(regex)].map(m => m.groups));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358692.html
標籤:javascript 正则表达式
