Regex JS-使用正则表达式在字符串中查找两个组

Regex JS- find two groups in a string using regex

我想了解如何使用正则表达式 (JS) 从以下字符串中获取 2 个捕获的组:

"Group: i_am_group |SubGroup: i_am_sub_group"

我想最后得到:group1: i_am_groupgroup2: i_am_sub_group

规则是-

Extract the first word after "Group: " into group1
Extract the first word after "SubGroup: " into group2

我需要用正则表达式实现这两个规则,这样我就可以 运行 它与 javaScript

中的 match() 函数

我正在尝试执行以下操作:

(?<=Group:\s)(\w+) ((?<=|SubGroup:\s)(\w*))

结果是:

提前致谢。

|在正则表达式中有特殊含义,用于指定替代项。您需要对其进行转义以使其与字面匹配。

在那之后捕捉部分时,无需使用后视。环视的目的是将它们排除在匹配的字符串之外,但如果您只对捕获组感兴趣,这是无关紧要的。

这个正则表达式应该适合你:

Group:\s(\w+) \|SubGroup:\s(\w*)

DEMO

如果通过“单词”您对 \w 的定义(即 [A-Za-z0-9_];下面有更多内容)感到满意,您可以这样做:

const rex = /Group:\s*(\w+).*?SubGroup:\s*(\w+)/;

如果要允许 GroupSubGroup 为小写,请添加 i 标志。

那个:

  1. 寻找 Group:
  2. \s* - 允许后面有可选的空格
  3. (\w+) 捕获后面的所有“单词”字符
  4. .*? - 寻找可选的任何东西(? 对实现它很重要 non-greedy)
  5. 寻找 SubGroup:
  6. \s* 可选空格再次出现
  7. (\w+) 捕获之后的所有“单词”字符

实例:

const str = "Group: i_am_group |SubGroup: i_am_sub_group";
const rex = /Group:\s*(\w+).*?SubGroup:\s*(\w+)/;
console.log(str.match(rex));

如果您希望“单词”字符的定义不同于 \w,请使用 [something_here]+ 而不是 \w+,其中 [] 你列出你想考虑“单词”字符的字符/字符范围。

例如,在英语中,我们通常不将 _ 视为单词的一部分(尽管您的示例使用了它,所以我会保留它),但我们通常将 [=33] 视为单词的一部分=] 成为单词的一部分。我们还经常允许从其他语言借用的字母,例如 éñ,因此您可能需要字符 class 中的字母。您可能会走得更远并且(在 ES2015+ 环境中)使用 Unicode 对“字母”的定义,它被写为 \p{Letter} (并且需要表达式上的 u 标志):

const rex = /Group:\s*([-\p{Letter}0-9_]+).*?SubGroup:\s*([-\p{Letter}0-9_]+)/u;

(最开始的-按字面意思处理,不作为范围的指示符。)

实例:

const str = "Group: i_am_group |SubGroup: i_am_sub_group";
const rex = /Group:\s*([-\p{Letter}0-9_]+).*?SubGroup:\s*([-\p{Letter}0-9_]+)/u;
console.log(str.match(rex));