我们知道,正则表达式中,可以用 . 表示任意单个字符,但在underscore和jquery的源代码中,我们可以看到,这些著名类库的代码中,经常并不是用 . 来表示任意字符,而是使用 [\w\W] 或者[\s\S] 。乍一看,好像表达的含义是一样的,可是为什么放着简单的方法不用,而去多绕个圈子?今天就简单说说这个问题。

首先我们必须要正确理解 . 的含义。其实说它表示任意单个字符,可能会让人产生误解,必须要强调一下,这个“任意单个字符”不包括控制换行的字符,也就是不包含 \n \r \u2028 或\u2029 这几个字符。而 \W 和 \s 中是能够包含这些字符的。那个这两种写法的差异也就很清晰了,就是能否匹配到几个换行控制符的差异。

那么在什么时候我们需要考虑这几个换行控制符呢?当要处理的字符串可能包含换行时。这样的情景太多了,处理html字符串、处理template、nodejs读取文本等等。

提及多行文本的场景,我们很容易想到正则表达式的 m 模式(多行模式)。那么多行模式对我们今天讨论的问题有影响吗?我不是很确定。为什么不确定呢?有些人信誓旦旦地声称单行模式下 . 的含义与多行模式下不同,单选模式下等同于 [\w\W] 或者 [\s\S] ,而多行模式下会排除换行控制符。但据我试验,以及参考MDN的说法,这是不对的。的确有很多语言的正则表达式会有上述特性,但在javascript中我没有看到,不知道会不会有浏览器方面的差异。那么多行模式对于javascript而言影响的是什么呢?我认为仅仅是改变了 ^ 和 $ 标识的含义:单行模式下,分别表示整个字符串的开始的结尾;多行模式下表示每一行的开始和结尾。而不管多行模式还是单行模式,我认为 . 都是不包含换行控制字符的,等价于 [^\n\r\u2028\u2029] 。

再多延伸一点点,对于现代浏览器,可以直接用 [^] 来匹配任意字符的。

例子程序不想写了,有兴趣的可以自己试验一下,分别用 /.*/g 、 /^.*$/g 、 /.*/gm 、/^.*$/gm 来匹配一下 "abc\nedf" ,其中道理不言自明。

java正则匹配英文句号_谈谈正则表达式中的句号.相关推荐

  1. java正则匹配英文句号_「正则表达式」王国奇遇记

    第一回 初来乍到 NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看 ...

  2. java正则匹配英文句号_java正则表达式最简单 学习教程

    本大教程以一个验证手机号的表达式为例,学完本例后,基本上所有的表达式都能看懂了,但是如果想要达到上手就能写的程度,还需要多练习多测试 呀! 来看 这样一个代码 String mobilePhoneRe ...

  3. C++正则匹配中文乱码_中文正则表达式匹配-正则中文匹配

    使用std::wregex #include <QtCore/QCoreApplication> #include <iostream> #include <string ...

  4. mysql 正则匹配 捕获组_常用正则表达式 捕获组(分组)

    1.img标签 //,空格后src以'或"开始..... Regex reg = new Regex("]*\\ssrc=(['\"]+[^<>'\" ...

  5. java正则匹配买火车票_matlab的正则表达式

    regexp--用于对字符串进行查找,大小写敏感: regexpi--用于对字符串进行查找,大小写不敏感: regexprep--用于对字符串进行查找并替换. 第一部分--单个字符的匹配 1 句点符号 ...

  6. java正则匹配下划线_正则表达式(匹配英文、中文、数字、下划线)

    如下的正则: 复制代码 代码示例: ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!. ...

  7. java正则匹配英文句号_Scala 正则表达式 0411

    Scala 正则表达式 Scala 通过 scala.util.matching 包中的 Regex 类来支持正则表达式.以下实例演示了使用正则表达式查找单词 Scala : import scala ...

  8. java正则匹配单引号_正则多行文本匹配(包含单引号的处理)

    正则你说有技术含量没有也没有什么技术含量,你说没有吧,它又很有技术含量! 这就是正则. 从开始到现在写正则,最深刻的体会就上面那一句话.学正则其实不难,都是一些符号背后代表的含义,但是活用起来那就真的 ...

  9. java正则匹配非html字符串_java正则表达式去除html中所有的标签和特殊HTML字符(以开头的)...

    packagecom.comcons.utils;importjava.io.BufferedReader;importjava.io.FileNotFoundException;importjava ...

最新文章

  1. java创建具体时间点_java单例饿汉模式对象创建时间点疑问
  2. linux plc编程软件,基于Linux平台的可编程控制器软PLC设计
  3. java跨站点脚本编制_跨站点请求伪造 跨站点脚本编制 通过框架钓鱼漏洞 | 学步园...
  4. 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
  5. SSH实战 · 唯唯乐购项目(下)
  6. 基于51单片机ADC0808的proteus仿真
  7. 什么是电子计算机NXI并行线,并行加法器
  8. 墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG资料124篇)
  9. 小程序的优势和劣势是什么?
  10. 吃货在东京 -- 记那段吃不饱的日子 之三 筑地的生鱼刺身
  11. 无人机航拍高空全景图的四个步骤
  12. 如何把一份pdf文件拆分为多个?
  13. 程序员的那些搞笑牛逼注释
  14. 安装配置OOS2016
  15. 【SEED Labs 2.0】Packet Sniffing and Spoofing Lab
  16. 巧妙利用DZ自有功能实现豆丁网在线文档功能
  17. 谷歌浏览器和火狐浏览器永久禁用缓存【一劳永逸的解决方式】
  18. summernote-详细使用
  19. Hive开启CTE物化
  20. 2022虚拟数字人TOP50排行榜出炉,李未可、柳夜熙等IP入选虚拟偶像TOP30

热门文章

  1. Microsoft Office无法联网激活的解决办法
  2. app测试模拟器和真机区别
  3. 欢欣雀跃服务器维护到几点,大话维护解读1217:合服可能迎来改名潮;套装一键合成,玩家欢呼雀跃...
  4. 杂项-关于绿联扩展坞的网口被识别为光驱
  5. 【转载】什么是隐写技术?(Kaggle近期竞赛ALASKA2 Image Steganalysis)
  6. Unity URP介绍
  7. 华章7-8月份新书简介(2017年)
  8. 【计算机毕业设计】323电子病历系统
  9. 考研数学 每日一题 第十一天
  10. Excel时间递增或递减