【D1n910】正则表达式入门(六)
正常操作,正常分析,大家好,我是D1n910。
现在正在高铁上。
这是一篇系列有关于正则表达式的前端教学文章,如果你还没看过之前的文章内容,建议先看过之前的内容之后再进行阅读以下内容。






正文从这里开始
十五、贪婪与懒惰
贪婪的意思是——能吃多少吃多少;
懒惰的意思是——能不吃多少,就不吃多少。
我以弹幕作为我们的之前的正则表达式应用例子,在这里,就不能够得到应用了。在哪里可以得到应用呢?
在我们编程中,考虑这样的一种情况,我们要从一句话中筛选出书名,比如在JavaScript语言,从“我喜欢看《舒克和贝塔:五星飞碟》”,通过使用''我喜欢看《舒克和贝塔:五星飞碟》'.match(/(?<=《).*(?=》)/)'就可以得到我们要的“舒克和贝塔:五星飞碟”
这里对正则表达式的应用是 [exp].match(/exp/), match是 JavaScript 字符串变量中的一个方法,可以匹配出我们需要的内容。“/(?<=《).*(?=》)/”的意思是,匹配 "《"这个【位置】之后,开始的任意字符(.),看是不是在 " 》"之前。(零宽断言是我们上一节学的内容哦)
结果如下:

这里还看不出我们要讲的“贪婪”、“懒惰”的特性,我们再改一下我们进行筛选的字符串内容,改成'我喜欢看《舒克和贝塔:五星飞碟》和《倚天屠龙记》'

我们可以发现,匹配到的内容是“舒克和贝塔:五星飞碟》和《倚天屠龙记”,而不是我们刚刚的“舒克和贝塔:五星飞碟”。
原因在于正则表达式默认开启的是贪婪模式,所以我们在匹配到左数第一个“》”以后,还会继续匹配下去,因为“》”本身也属于“.”这个的范围之内。
为了我们刚刚的目的,我们必须要告诉我们的正则表达式,要用懒惰的,不能用贪婪的,不能吃太多。

直接在匹配任意字符的重复任意次元字符后面加上“?”即可,通过发问号,提醒正则表达式同学,你都那么胖了, 还要继续吃吗,黑人问号。
懒惰限定符用在重复限定符后面,可以参考下面的表~

十六、处理选项
处理选项的意思是,我们可以在“/exp/“的“/”后面添加一些配置设定,从而改变原来的元字符的含义。比如我们知道"/t/"只可以匹配小写的t,如果我们想同时匹配大写的T,可以用“/t/i”

十七、平衡组/递归匹配
实测Javascript不能使用
十八、其他我没说的内容
hey,这是正则表达式教学的最终环节,还有一些元字符,我没提到的,你可以参考下面的表格

如果你够仔细看之前的内容,你会发现,我参考的是下面的教程进行学习~
http://deerchao.net/tutorials/regex/regex.htm

恭喜!你已经学习完了正则表达式啦~(18/18)