我有一个像正则表达式来捕捉连续字
"Sony Xperia Z1 Compact"
"Samsung Galaxy Trend Plus"
"Samsung Galaxy Tab 2"
移动设备的名单,我需要一个正则表达式来创建这些字符串标签以这种方式符合连续字(预期结果):
["Sony", "Sony Xperia", "Sony Xperia Z1", "Sony Xperia Z1 Compact"]
我曾尝试一些与积极前瞻:
/(?=([a-z]+\s+[a-z]+))[a-z]+/i
我获得:
model = "Samsung Galaxy Trend Plus"
"Samsung Galaxy Trend Plus"
model.match(/(?=([a-z]+\s+[a-z]+))[a-z]+/i)
["Samsung", "Samsung Galaxy"]
但这个时候你有一个字也不行,所以,添加一个可选的组后:
/(?=([a-z]+\s+[a-z]+))|[a-z]+/i
我获得:
model = "Samsung"
"Samsung"
model.match(/(?=([a-z]+\s+[a-z]+))|[a-z]+/i)
["Samsung", undefined]
所以,试图概括:
/(?=([a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+\s+[a-z]+))[a-z]+/i
我得到
"Samsung Galaxy Trend Plus"
model.match(/(?=([a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+))(?=([a-z]+\s+[a-z]+\s+[a-z]+\s+[a-z]+))[a-z]+/i)
["Samsung", "Samsung Galaxy", "Samsung Galaxy Trend", "Samsung Galaxy Trend Plus"]
而且应该有高达ñ的话,如何让这个普通的正则表达式(在ñ字变量自由度)? 另外,如何摆脱undefined
?正如here所解释的那样,我应该使用一个非捕获组,因此这会阻止我以我正在做的方式捕获连续的单词。
的解决方案也成为一个reg EXP? – epascarello
是的,它必须是一个正则表达式。 – loretoparisi
我不认为'Sony Xperia Compact'是由连续的单词形成的。 [这个解决方案怎么样](http://jsfiddle.net/e6w0mp31/)? –