美文网首页
正则表达式4-多行的诗歌

正则表达式4-多行的诗歌

作者: 转角遇见一直熊 | 来源:发表于2016-03-02 12:42 被阅读75次

解析多行字符

有的时候我们需要在文本中解析,这个时候需要解决匹配多次和换行的问题,通过一个例子来看看吧。

愤怒的小鸟

我们看一下愤怒的小鸟里面的人物介绍:

【红色小鸟】(红火)
体型小,重量轻,攻击弱,无特效,可在滚动时消灭绿猪。适合攻击玻璃与木头,攻击混凝土较弱。(关卡1-1)
【蓝色小鸟】(蓝冰)
体型极小,重量轻,攻击弱,可以变成3个。攻击玻璃较强,攻击木头与混凝土较弱。(关卡1-10)
【黄色小鸟】(黄风)
体型较小,重量较轻,特效为加速,使用前攻击弱,使用后攻击中等。攻击木头较强,攻击玻璃与混凝土很弱。(关卡1-16)
【黑色小鸟】(黑炮)
体型较大,重量重,会爆炸,撞击力强,爆炸力弱,气浪强。适合攻击混凝土。(关卡2-5)
【白色小鸟】(白弹)
体型大,重量重,可以向下方下一个“炸蛋”,同时白鸟变小且被弹开。撞击力弱,“炸蛋”爆炸力大,气浪低,不适合攻击所有材料(“炸蛋”碰到任何物体都会立刻爆炸,除了碰到自己的小鸟或弹簧会弹开以外,都会立刻爆炸,弹开时撞击力较强,可对对方造成中等伤害!)。直接用身体适合攻击木板和玻璃。(关卡2-14)
【绿色小鸟】(绿颜)
体型中等,重量较轻,嘴大,可以回旋,使用特效前攻击弱,使用后攻击中等。适合攻击玻璃与木头,攻击混凝土较弱。(关卡6-5、关卡9-6)
【红色大鸟】(虹羽)
外形为红色小鸟的放大版,体型大,重量中等,无特效,攻击力极强,撞击地面时有弹性,弹起后碰到物体伤害力中等。(关卡9-1)
【橙色小鸟】(气腾)
攻击力中等,点击后会膨胀以弹开开附近的砖块。(关卡18-1)
【粉色小鸟】(粉黛)
攻击力低,点击后会把周围的东西弄上泡泡,使其向上移动。

我们的目标是

  • 找到所有小鸟的名字,也就是包含‘小鸟‘且在中括号中的鸟名字。
  • 前后没有其他字符

实战

先写一段测试程序吧:

str.match(/小鸟/);只能返回一个匹配

var str = 
'【红色小鸟】\n【蓝色小鸟】(蓝冰)\n【黄色小鸟】(黄风)\n【黑色小鸟】\n【白色小鸟】(白弹)\n【绿色小鸟】(绿颜)\n【红色大鸟】(虹羽) \n【橙色小鸟】(气腾)\n【粉色小鸟】(粉黛)';

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

我们加上修饰符g

str.match(/小鸟/g);

返回了["小鸟", "小鸟", "小鸟", "小鸟", "小鸟", "小鸟", "小鸟", "小鸟", "小鸟", "小鸟"]。还不错,但是我们要的是鸟名字。

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

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

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

返回["【红色小鸟】", "【蓝色小鸟】", "【黄色小鸟】", "【黑色小鸟】", "【白色小鸟】", "【绿色小鸟】", "【橙色小鸟】", "【粉色小鸟】"]
好像还不错,但是我们需要前后没有其他字符的小鸟名字。

加上^,$

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

这下返回null了

加上m

上面之所以返回null,是因为^$的作用加在了整个字符串的上面,也就是验证'【红色小鸟】\n【蓝色小鸟】(蓝冰)\n【黄色小鸟】(黄风)\n【黑色小鸟】(黑炮)\n【白色小鸟】(白弹)\n【绿色小鸟】(绿颜)\n【红色大鸟】(虹羽) \n【橙色小鸟】(气腾)\n【粉色小鸟】(粉黛)'整个字符串是否符合模式,显然是不符合的,我们希望对每一行进行匹配,m就是干这个的。

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。
str.match(/^【[\u4e00-\u9fa5]+小鸟】$/gm);

这下只返回了["【红色小鸟】", "【黑色小鸟】"],只有这两个是没有外号,前后都没有字符的,符合我们的要求。

相关文章

  • 正则表达式4-多行的诗歌

    解析多行字符 有的时候我们需要在文本中解析,这个时候需要解决匹配多次和换行的问题,通过一个例子来看看吧。 愤怒的小...

  • 实用小技巧

    正则表达式 正则表达式匹配多行注解/**/

  • 正则表达式 、文本处理工具

    正则表达式 正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串基础正则表达式(grep)...

  • 跳进的那些js坑

    1、多行注释 如上,正则表达式里的*/结尾的部分,将多行注释已经给结束掉,当然报错啦 2、变量提升机制 原因:当函...

  • 【Python进阶】2.8多行匹配模式

    2.8 多行匹配模式 问题 你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。 解决方案 这个问...

  • js正则

    1、创建正则表达式的两种方式 正则表达式由两部分组成 :模式+标志 标志:g:全局;i:不区分大小写;m:多行匹配...

  • ES6(二)字符串与正则表达式 2

    1.flags获取正则表达式的标志 2.模板字面量( template literal ) 3.多行字符串 `` ...

  • python 30:增加正则表达式的可读性,参数re.VERBO

    可以将正则表达式分多行写出,每一行后面写上注释,这样使复杂正则表达式具有可读性。下面是一个匹配电话号码的例子: p...

  • 4-诗歌给我力量

    我生命的生命,我要保持我的躯体永远纯洁,因为我知道你的生命的摩抚,接触着我的四肢。我要永远从我的思想中屏除虚伪,因...

  • 正则表达式与文件格式化处理

    正则表达式(Regular Expression)是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符...

网友评论

      本文标题:正则表达式4-多行的诗歌

      本文链接:https://www.haomeiwen.com/subject/fksnkttx.html