多组正则表达式

时间:2013-09-12 16:40:02

标签: regex

我需要解析一些文本,其中包含一个六位数代码,一个可选确认字符串(其中一个' ok',' yes'或者' no'),然后是一些自由文本。所以它可能看起来像:

123456 Ok Mary had a little lamb

......但可能同样是

123456 Mary had a little lamb

......我需要分别捕获这三个部分。

我有这个正则表达式:

/^\s*?(\d\d\d\s?\d\d\d)\s*?(yes|no|ok)?\s*?(.*?)$/i

......哪个不起作用!我可以调整它,以便它可以工作,如果你总是有“是”,“没有'或者' ok',但这是一个可选元素。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:4)

问题在于,\s*?没有意义,您需要\s*:因为*表示0或更多已经使空格可选。

使用

/^\s*?(\d{3}\s?\d{3})\s*(yes|no|ok)?\s*(.*)$/i

例如在JavaScript中,

var str = '123456 Ok Mary had a little lamb';
var arr = str.match(/^\s*?(\d{3}\s?\d{3})\s*(yes|no|ok)?\s*(.*)$/i).slice(1);

给出

["123456", "Ok", " Mary had a little lamb"]