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它不是重复的,因为它不仅仅是使正则表达式的一部分成为可选的。看,它不起作用。我为它添加了另一个副本。