每一個小鳥都很憤怒民效,因為我們還不會分組作戰(zhàn)
我們還是用小鳥們做例子,來學(xué)會使用分組
var str =
'【紅色小鳥】(紅火)體型小,重量輕鹃锈,攻擊弱,無特效瞧预,可在滾動時消滅綠豬屎债。適合攻擊玻璃與木頭仅政,攻擊混凝土較弱。(關(guān)卡1-1)\n【藍色小鳥】(藍冰)體型極小盆驹,重量輕圆丹,攻擊弱,可以變成3個躯喇。攻擊玻璃較強辫封,攻擊木頭與混凝土較弱。(關(guān)卡1-10)';
str.match(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9廉丽,倦微。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm);
str.split(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9,正压。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm);
我們希望把格式變成
"【紅色小鳥】的外號是(紅火),出現(xiàn)在關(guān)卡1-1\n【藍色小鳥】的外號是(藍冰),出現(xiàn)在關(guān)卡1-10"
分析字符串
- 需要進行多行全局搜索欣福,前后需要無字符,所以要用上
gm^$
焦履。 - 需要取出名字拓劝,【[\u4e00-\u9fa5]+】
- 需要拿到外號,([\u4e00-\u9fa5]+)
- 需要拿到能力嘉裤,[\u4e00-\u9fa50-9郑临,。]+
- 需要拿到關(guān)卡屑宠,[\u4e00-\u9fa5]+(\d+-\d+)
把以上拼接在一起就是
/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9厢洞,。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm
分組能干嘛呢
我們知道()是用來分組的典奉,可是分組有什么用呢躺翻。上面分別給2,3秋柄,4获枝,5步的正則都加上了()蠢正。我們可以在string的replace函數(shù)中使用分組骇笔。看一下這個代碼嚣崭。
str.replace(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9笨触,。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm, "$1的外號是$2,出現(xiàn)在關(guān)卡$4");
這樣我們的目的已經(jīng)達到了雹舀,輸出了"【紅色小鳥】的外號是(紅火),出現(xiàn)在關(guān)卡1-1\n【藍色小鳥】的外號是(藍冰),出現(xiàn)在關(guān)卡1-10"
芦劣。
不捕獲的分組
我們可以注意到上面使用$4
引用到了關(guān)卡,如何使用$3
就引用到呢说榆?
str.replace(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))(?:[\u4e00-\u9fa50-9虚吟,寸认。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm, "$1的外號是$2,出現(xiàn)在關(guān)卡$3");
?:
表示不捕獲的分組,我們在能力分組上(?:[\u4e00-\u9fa50-9串慰,偏塞。]+)
加上了不捕獲的標志。
好用的工具
一旦正則表達式復(fù)雜起來邦鲫,很難看懂灸叼,這時候利用一些工具則非常有用
上面這個網(wǎng)站可以用來分析正則表達式。有高亮的功能哦庆捺」沤瘢可惜對中文支持的不是很好。