美文网首页
正则表达式5-分组突击

正则表达式5-分组突击

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

每一个小鸟都很愤怒,因为我们还不会分组作战

我们还是用小鸟们做例子,来学会使用分组

var str = 
'【红色小鸟】(红火)体型小,重量轻,攻击弱,无特效,可在滚动时消灭绿猪。适合攻击玻璃与木头,攻击混凝土较弱。(关卡1-1)\n【蓝色小鸟】(蓝冰)体型极小,重量轻,攻击弱,可以变成3个。攻击玻璃较强,攻击木头与混凝土较弱。(关卡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);


我们希望把格式变成

"【红色小鸟】的外号是(红火),出现在关卡1-1\n【蓝色小鸟】的外号是(蓝冰),出现在关卡1-10"

分析字符串

  1. 需要进行多行全局搜索,前后需要无字符,所以要用上gm^$
  2. 需要取出名字,【[\u4e00-\u9fa5]+】
  3. 需要拿到外号,([\u4e00-\u9fa5]+)
  4. 需要拿到能力,[\u4e00-\u9fa50-9,。]+
  5. 需要拿到关卡,[\u4e00-\u9fa5]+(\d+-\d+)
    把以上拼接在一起就是
/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9,。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm

分组能干嘛呢

我们知道()是用来分组的,可是分组有什么用呢。上面分别给2,3,4,5步的正则都加上了()。我们可以在string的replace函数中使用分组。看一下这个代码。

str.replace(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))([\u4e00-\u9fa50-9,。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm, "$1的外号是$2,出现在关卡$4");

这样我们的目的已经达到了,输出了"【红色小鸟】的外号是(红火),出现在关卡1-1\n【蓝色小鸟】的外号是(蓝冰),出现在关卡1-10"

不捕获的分组

我们可以注意到上面使用$4引用到了关卡,如何使用$3就引用到呢?

str.replace(/^(【[\u4e00-\u9fa5]+】)(([\u4e00-\u9fa5]+))(?:[\u4e00-\u9fa50-9,。]+)([\u4e00-\u9fa5]+(\d+\-\d+))$/gm, "$1的外号是$2,出现在关卡$3");

?:表示不捕获的分组,我们在能力分组上(?:[\u4e00-\u9fa50-9,。]+)加上了不捕获的标志。

好用的工具

一旦正则表达式复杂起来,很难看懂,这时候利用一些工具则非常有用

http://www.regexr.com/

上面这个网站可以用来分析正则表达式。有高亮的功能哦。可惜对中文支持的不是很好。

相关文章

  • 正则表达式5-分组突击

    每一个小鸟都很愤怒,因为我们还不会分组作战 我们还是用小鸟们做例子,来学会使用分组 我们希望把格式变成 分析字符串...

  • 2019-05-07python学习记录-搜文本

    正则表达式 添加括号可以在正则表达式中加分组groups() 复数可以一次获得所有分组 | 用管道匹配多个分组? ...

  • Django的路由系统

    基本格式 分组命名匹配 在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern...

  • iOS-正则表达式使用

    正则表达式与NSPredicate连用 正则表达式类 分组的使用 相关资料 常用正则表达式

  • 5: 正则表达式 + 三剑客之grep

    3 正则表达式 正则表达式元字符分类: 字符匹配 次数匹配 位置锚定 分组 基本正则表达式: vim, grep,...

  • Python Re Group

    python group() 正则表达式中,group()用来提出分组截获的字符串,()用来分组 究其因 正则表达...

  • JS正则表达式的骚操作

    参考资料 《JS正则表达式的分组匹配》《正则表达式之捕获组/非捕获组介绍》《正则表达式中(?:pattern)、(...

  • 《JavaScript权威指南》读书笔记6 正则表达式

    正则表达式字符类: 正则表达式重复字符语法: 正则表达式的选择、分组和引用字符: 正则表达式中的锚字符: 正则表达...

  • day 17 正则表达式

    1.什么是正则表达式 2.python对正则表达式的支持 匹配次数 分之和分组

  • Python基础022--正则表达式

    正则表达式模块、贪婪匹配和非贪婪匹配、正则分组、match和search的使用 常用的正则表达式元字符 正则表达式...

网友评论

      本文标题:正则表达式5-分组突击

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