我需要解析一些文本,其中包含一个六位数代码,一个可选确认字符串(其中一个' 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',但这是一个可选元素。
非常感谢任何想法。
答案 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"]