Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式,用于在单独的组中捕获两个或三个单词_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式,用于在单独的组中捕获两个或三个单词

JavaScript正则表达式,用于在单独的组中捕获两个或三个单词,javascript,regex,Javascript,Regex,我正在尝试匹配(与捕获组一起)以下输入: favorite colors are red orange yellow favorite colors are red orange 第一个短语有3种颜色,第二个短语有2种颜色 我的正则表达式是: /favorite colors are (.*) (.*) (.*)/i 然而,只有当我有3种颜色时,这个正则表达式才有效。我如何重写这个正则表达式,使它也可以接受2种颜色?我试过添加一个?到3捕获组的末尾,但这需要我的输入短语有一个尾随空格 如果没

我正在尝试匹配(与捕获组一起)以下输入:

favorite colors are red orange yellow
favorite colors are red orange
第一个短语有3种颜色,第二个短语有2种颜色

我的正则表达式是:

/favorite colors are (.*) (.*) (.*)/i
然而,只有当我有3种颜色时,这个正则表达式才有效。我如何重写这个正则表达式,使它也可以接受2种颜色?我试过添加一个?到3捕获组的末尾,但这需要我的输入短语有一个尾随空格

如果没有提供第三种颜色,我不介意将捕获组中的3种颜色设为空


根据帖子,建议的修复为
/最喜欢的颜色是(.*)(.*)(?:(.*))?/i
,但是,它不起作用,因为它匹配第一组的红橙色,第二组的黄色,而第一组的红色,第二组的橙色和第三组的黄色。这篇文章建议使用
[^\s]
,但结果是匹配尾随的点。

最喜欢的颜色是(.*)(.*)(.*)图案在组1和组2之间以及组2和组3之间至少需要一个空格

此外,为了只匹配单词字符,您需要使用
\w
而不是匹配除换行字符以外的任何字符的

您可以使用带有
\w+
\w+
模式的可选非捕获组替换
*
模式:

/favorite colors are (\w+) (\w+)(?: (\w+))?/i


此处,
(?:(\w+))
匹配捕获到组3中的可选模式序列、空格和1+字字符(字母、数字或

您可能希望确保捕获的组只接受单个单词,而不是
(*)
您好,请看一看重复的主题,如果它没有给你一些见解,请相应地编辑你的问题。@revo它不是重复的,因为它不仅仅是使正则表达式的一部分成为可选的。看,它不起作用。我为它添加了另一个副本。