【发布时间】:2018-07-16 05:47:02
【问题描述】:
我正在尝试匹配(连同捕获组)以下输入:
favorite colors are red orange yellow
favorite colors are red orange
第一个词组有 3 种颜色,第二个词组有 2 种颜色。
我的正则表达式是:
/favorite colors are (.*) (.*) (.*)/i
但是,此正则表达式仅在我有 3 种颜色时才有效。我怎样才能重写这个正则表达式,以便它也可以接受 2 种颜色?我试过添加一个?到 3 个捕获组的末尾,但这要求我的输入短语有一个尾随空格。
如果未提供第三种颜色,我不介意在捕获组中将第三种颜色设为空。
根据http://stackoverflow.com/questions/12451731 帖子,建议修复为/favorite colors are (.*) (.*)(?: (.*))?/i,但是,它不起作用,因为它匹配红色橙色作为第 1 组,黄色作为第 2 组,而红色应该在第 1 组中,橙色应该属于第 2 组,黄色应属于第 3 组。http://stackoverflow.com/questions/8991178 帖子建议使用[^\s],但事实证明它匹配尾随点。
【问题讨论】:
-
您可能希望确保捕获的组只接受单个单词,而不是
(.*) -
您好,请查看重复的主题,如果它没有给您一些见解,请相应地编辑您的问题。
-
@revo 这不是that question 的骗子,因为它不是只是关于使正则表达式的一部分成为可选的。请参阅
favorite colors are (.*) (.*)(?: (.*))?,它不起作用。 -
我为它添加了另一个骗子。
标签: javascript regex