JavaScript正则表达式可捕获单独组中的两个或三个单词

时间:2018-07-11 21:27:04

标签: javascript regex

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

favorite colors are red orange yellow
favorite colors are red orange

第一个短语有3种颜色,第二个短语有2种颜色。

我的正则表达式是:

/favorite colors are (.*) (.*) (.*)/i

但是,仅当我有3种颜色时,此正则表达式才有效。我该如何重写此正则表达式,使其也可以接受2种颜色?我尝试添加一个?到第3个捕获组的末尾,但这要求我的输入短语必须有一个尾随空格。

如果不提供第3种颜色,我不介意在捕获组中使这3种颜色为空。

根据http://stackoverflow.com/questions/12451731帖子,建议的修补程序为/favorite colors are (.*) (.*)(?: (.*))?/i,但是它不起作用,因为它与红色橙色(第1组)和黄色(第2组)相匹配,而红色应在第2组中1,橙色应该在第2组中,黄色应该在第3组中。http://stackoverflow.com/questions/8991178帖子建议使用[^\s],但事实证明与末尾的点匹配。

1 个答案:

答案 0 :(得分:0)

favorite colors are (.*) (.*) (.*)模式在组1和组2之间以及在组2和组3之间至少需要一个空格。

此外,要仅匹配单词char,您需要使用\w而不是.来匹配除行换行符之外的任何char。

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

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

请参见this regex demo

在这里,(?: (\w+))?匹配可选的序列模式,空格和捕获到第3组的1个以上字符字符(字母,数字或_)。