我有以下字串:
"Group: I_am_group |SubGroup: I_am_subgroup"
以及以下正則運算式:
Group:\s(?<group>\w ) \|SubGroup:\s(?<subGroup>\w*)
結果是:
結果
直到這里 - 它對我來說是完美的,但是當我遇到以下情況時:
對于以下字串:
1. "Group: I_am_group |SubGroup:"
2. "Group: I_am_group |"
3. "Group: I_am_group"
我想得到結果(例如對于字串“Group:I_am_group”):
Match1 Group: I_am_group
group I_am_group
subGroup null
找不到時是否可以使用正則運算式創建一個空組?或者如果未找到該值,則為組提供默認值?
在這種情況下,我想在值為 null 的結果上創建名為“subGroup”的組。
uj5u.com熱心網友回復:
每個規格的不匹配組具有價值undefined,而不是null。命名組是不匹配的,例如,當它出現在另一個不匹配的可選組中時。
現在拿你的三個應該產生一個空組的示例字串并將它們與原始字串進行比較"Group: I_am_group |SubGroup: I_am_subgroup"。
- 在字串 (1.) 中,
" I_am_subgroup"缺少。那是\s(?<subGroup>\w*)在正則運算式中。 - 在字串 (2.) 中,
"SubGroup: I_am_subgroup"缺少。那是SubGroup:\s(?<subGroup>\w*)在正則運算式中。 - 在字串 (3.) 中,
" |SubGroup: I_am_subgroup"缺少。那是\|SubGroup:\s(?<subGroup>\w*)在正則運算式中。
通過將所有這三個部分包含在一個可選組中,我們得到
/Group:\s(?<group>\w )( \|(SubGroup:(\s(?<subGroup>\w*))?)?)?/
這是一個正則運算式,在所有情況下都匹配空匹配subGroup。請注意,盡管\w*可以將其替換為\w ,除非您希望在所有其他部分都存在的情況下subGroup成為空字串(而不是undefined)。
const regExp = /Group:\s(?<group>\w )( \|(SubGroup:(\s(?<subGroup>\w ))?)?)?/;
const str1 = "Group: I_am_group |SubGroup:";
const str2 = "Group: I_am_group |";
const str3 = "Group: I_am_group";
console.log(str1.match(regExp).groups);
console.log(str2.match(regExp).groups);
console.log(str3.match(regExp).groups);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445808.html
標籤:javascript 正则表达式 细绳 正则表达式组
