正則表達(dá)式4-多行的詩(shī)歌

解析多行字符

有的時(shí)候我們需要在文本中解析,這個(gè)時(shí)候需要解決匹配多次和換行的問題,通過一個(gè)例子來看看吧。

憤怒的小鳥

我們看一下憤怒的小鳥里面的人物介紹:

【紅色小鳥】(紅火)
體型小,重量輕,攻擊弱,無特效,可在滾動(dòng)時(shí)消滅綠豬。適合攻擊玻璃與木頭,攻擊混凝土較弱。(關(guān)卡1-1)
【藍(lán)色小鳥】(藍(lán)冰)
體型極小,重量輕,攻擊弱,可以變成3個(gè)。攻擊玻璃較強(qiáng),攻擊木頭與混凝土較弱。(關(guān)卡1-10)
【黃色小鳥】(黃風(fēng))
體型較小,重量較輕,特效為加速,使用前攻擊弱,使用后攻擊中等。攻擊木頭較強(qiáng),攻擊玻璃與混凝土很弱。(關(guān)卡1-16)
【黑色小鳥】(黑炮)
體型較大,重量重,會(huì)爆炸,撞擊力強(qiáng),爆炸力弱,氣浪強(qiáng)。適合攻擊混凝土。(關(guān)卡2-5)
【白色小鳥】(白彈)
體型大,重量重,可以向下方下一個(gè)“炸蛋”,同時(shí)白鳥變小且被彈開。撞擊力弱,“炸蛋”爆炸力大,氣浪低,不適合攻擊所有材料(“炸蛋”碰到任何物體都會(huì)立刻爆炸,除了碰到自己的小鳥或彈簧會(huì)彈開以外,都會(huì)立刻爆炸,彈開時(shí)撞擊力較強(qiáng),可對(duì)對(duì)方造成中等傷害?。V苯佑蒙眢w適合攻擊木板和玻璃。(關(guān)卡2-14)
【綠色小鳥】(綠顏)
體型中等,重量較輕,嘴大,可以回旋,使用特效前攻擊弱,使用后攻擊中等。適合攻擊玻璃與木頭,攻擊混凝土較弱。(關(guān)卡6-5、關(guān)卡9-6)
【紅色大鳥】(虹羽)
外形為紅色小鳥的放大版,體型大,重量中等,無特效,攻擊力極強(qiáng),撞擊地面時(shí)有彈性,彈起后碰到物體傷害力中等。(關(guān)卡9-1)
【橙色小鳥】(氣騰)
攻擊力中等,點(diǎn)擊后會(huì)膨脹以彈開開附近的磚塊。(關(guān)卡18-1)
【粉色小鳥】(粉黛)
攻擊力低,點(diǎn)擊后會(huì)把周圍的東西弄上泡泡,使其向上移動(dòng)。

我們的目標(biāo)是

  • 找到所有小鳥的名字,也就是包含‘小鳥‘且在中括號(hào)中的鳥名字。
  • 前后沒有其他字符

實(shí)戰(zhàn)

先寫一段測(cè)試程序吧:

str.match(/小鳥/);只能返回一個(gè)匹配

var str = 
'【紅色小鳥】\n【藍(lán)色小鳥】(藍(lán)冰)\n【黃色小鳥】(黃風(fēng))\n【黑色小鳥】\n【白色小鳥】(白彈)\n【綠色小鳥】(綠顏)\n【紅色大鳥】(虹羽) \n【橙色小鳥】(氣騰)\n【粉色小鳥】(粉黛)';

str.match(/小鳥/);//返回["小鳥"]

我們加上修飾符g

str.match(/小鳥/g);

返回了["小鳥", "小鳥", "小鳥", "小鳥", "小鳥", "小鳥", "小鳥", "小鳥", "小鳥", "小鳥"]。還不錯(cuò),但是我們要的是鳥名字。

加上名字,需要匹配漢子和【】

漢子的字符一般在[\u4e00-\u9fa5]。

str.match(/【[\u4e00-\u9fa5]+小鳥】/g);

返回["【紅色小鳥】", "【藍(lán)色小鳥】", "【黃色小鳥】", "【黑色小鳥】", "【白色小鳥】", "【綠色小鳥】", "【橙色小鳥】", "【粉色小鳥】"]
好像還不錯(cuò),但是我們需要前后沒有其他字符的小鳥名字。

加上^,$

str.match(/^【[\u4e00-\u9fa5]+小鳥】$/g);

這下返回null了

加上m

上面之所以返回null,是因?yàn)?code>^$的作用加在了整個(gè)字符串的上面,也就是驗(yàn)證'【紅色小鳥】\n【藍(lán)色小鳥】(藍(lán)冰)\n【黃色小鳥】(黃風(fēng))\n【黑色小鳥】(黑炮)\n【白色小鳥】(白彈)\n【綠色小鳥】(綠顏)\n【紅色大鳥】(虹羽) \n【橙色小鳥】(氣騰)\n【粉色小鳥】(粉黛)'整個(gè)字符串是否符合模式,顯然是不符合的,我們希望對(duì)每一行進(jìn)行匹配,m就是干這個(gè)的。

修飾符 描述
i 執(zhí)行對(duì)大小寫不敏感的匹配。
g 執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)。
m 執(zhí)行多行匹配。
str.match(/^【[\u4e00-\u9fa5]+小鳥】$/gm);

這下只返回了["【紅色小鳥】", "【黑色小鳥】"],只有這兩個(gè)是沒有外號(hào),前后都沒有字符的,符合我們的要求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容