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_group
和group2: 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*)
如果通过“单词”您对 \w
的定义(即 [A-Za-z0-9_]
;下面有更多内容)感到满意,您可以这样做:
const rex = /Group:\s*(\w+).*?SubGroup:\s*(\w+)/;
如果要允许 Group
和 SubGroup
为小写,请添加 i
标志。
那个:
- 寻找
Group:
\s*
- 允许后面有可选的空格
(\w+)
捕获后面的所有“单词”字符
.*?
- 寻找可选的任何东西(?
对实现它很重要 non-greedy)
- 寻找
SubGroup:
\s*
可选空格再次出现
(\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));
我想了解如何使用正则表达式 (JS) 从以下字符串中获取 2 个捕获的组:
"Group: i_am_group |SubGroup: i_am_sub_group"
我想最后得到:group1: i_am_group
和group2: 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*)
如果通过“单词”您对 \w
的定义(即 [A-Za-z0-9_]
;下面有更多内容)感到满意,您可以这样做:
const rex = /Group:\s*(\w+).*?SubGroup:\s*(\w+)/;
如果要允许 Group
和 SubGroup
为小写,请添加 i
标志。
那个:
- 寻找
Group:
\s*
- 允许后面有可选的空格(\w+)
捕获后面的所有“单词”字符.*?
- 寻找可选的任何东西(?
对实现它很重要 non-greedy)- 寻找
SubGroup:
\s*
可选空格再次出现(\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));