Regex JS-组默认值/如果找不到值则创建一个空组

Regex JS- group default value / create an empty group if value not found

我有以下字符串:

"Group: I_am_group |SubGroup: I_am_subgroup"

以及以下正则表达式:

Group:\s(?<group>\w+) \|SubGroup:\s(?<subGroup>\w*)

结果是:

result

到此为止-对我来说很完美,但是当我遇到以下情况时:

对于以下字符串:

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

是否可以使用正则表达式在找不到时创建一个空组?或者如果找不到值,则为组提供默认值?

在这种情况下,我想在结果上创建名为- 'subGroup' 的组,值为- null。

每个规范的不匹配组的值为 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);