谈谈正则表达式中的句号.
久违的更新,今日我将分享一则关于正则表达式的小知识,其中涵盖了一个常被人们忽略的潜在坑点。对于热爱钻研的朋友来说,这无疑是一个值得参考的见解。
在正则表达式中,我们通常使用"."来表示任意单个字符。在诸如underscore和jquery的源代码中,你会发现这些知名类库的代码中并不总是采用这种方式。相反,它们经常选择使用[\w\W]或者[\s\S]。乍一看,这两种表达式的含义似乎相同,但为何会选择更为复杂的写法而放弃简洁的方法呢?今天就来揭开这个问题的神秘面纱。
我们必须深入理解"."的真正含义。尽管它通常被解释为可以匹配任意单个字符,但这个“任意”并不包括换行控制字符,如、\r、\u2028和\u2029。而\W和\s则能够匹配这些字符。这样,两种写法的差异就变得清晰起来,即是否能匹配到换行控制符。
那么,我们何时需要考虑这些换行控制字符呢?答案是在处理可能包含换行的字符串时,比如处理html字符串、template,或者在nodejs中读取文本等场景。
谈到多行文本,我们自然会想到正则表达式的多行模式(m模式)。那么,多行模式对我们今天讨论的问题有影响吗?对此,我持不确定态度。有些人坚信在单行模式下,“.”的含义与多行模式下不同,但在javascript中,根据我的试验以及MDN的说明,这一点并不成立。尽管在某些语言中可能存在上述特性,但在javascript中我并没有发现浏览器间的差异。对于javascript而言,多行模式主要影响的是^和$标识的含义。单行模式下,它们分别表示整个字符串的开始和结尾;而在多行模式下,则表示每一行的开始和结尾。
至于“.”,我认为无论在单行模式还是多行模式下,它都不包含换行控制字符,等价于[^\r\u2028\u2029]。再进一步说,在现代浏览器中,我们可以直接使用[^]来匹配任意字符。
至于具体的例子程序,我就不再赘述了。有兴趣的朋友可以自己尝试一下,用/./g、/^.$/g、/./gm、/^.$/gm来匹配一下"abcedf",其中的道理就会一目了然。
我想说的是,对于正则表达式的理解和应用,需要我们不断学习和。只有通过实践,我们才能更好地掌握它的精髓和奥秘。希望今天分享的内容能对你有所帮助,期待我们下次再见!
编程语言
- 谈谈正则表达式中的句号.
- JavaScript实现经纬度转换成地址功能
- Laravel 框架基于自带的用户系统实现登录注册及错
- js调出上下文菜单的实例
- php生成网页桌面快捷方式
- 如何使用ASP设置指定站点CPU最大使用程度
- 深入理解Sql Server中的表扫描
- 兼容浏览器的js事件绑定函数(详解)
- SQL Server利用bcp命令把SQL语句结果生成文本文件
- 在小程序开发中使用npm的方法
- VS2017做为Unity3D的脚本编辑器需要的最精简组件
- Ubuntu中搭建Nginx、PHP环境最简单的方法
- vue将毫秒数转化为正常日期格式的实例
- 微信小程序 Video API实例详解
- layer插件select选中默认值的方法
- 浅谈EasyUi ComBotree树修改 父节点选择的问题