-
深入浅出正则表达式中的边界\b和\B
正则表达式中:
\b 表示单词边界
\B 表示非单词边界,应理解为(非单词)边界,而不是非(单词边界),它仍然匹配的是边界
边界
我将正则中的位置分为 字符的占位 和 字符的间隙。
字符的占位是显式的位置。
以 I'm iron man 为例。
肉眼可见的字母 符号 空格都是可以占位的字符,也就是可以用下标获取到字符的位置。
字符的间隙是隐式的位置。
即显示位置之间的位置,比如I和'之间的位置,字符串开头和I之间的位置等。
边界 指的是占位的字符左右的间隙位置。
单词
正则中所说的单词指的是 \w 可以匹配的字符,即数字、大小写字母以及下划线 [0-9a-zA-Z_]
\b 单词边界
单词边界匹配的就是这样的间隙位置:
左边占位的字符或右边占位的字符,至少有一个不是 \w
// 只有首尾位置匹配
console.log('0aZ_'.replace(/\b/g, '.')) // .0aZ_.
// +不是\w,所以它的左右间隙都可以被匹配
console.log('a+a'.replace(/\b/g, '.')) // .a.+.a.
// 空格也不是\w,所以它的左右间隙都可以被匹配
console.log('a a'.replace(/\b/g, '.')) // .a. .a.
\B 非单词边界
理解了 \b,\B就好理解了。
它匹配的也是 边界 ,针对的是 与 \b 相反 的 非单词(\W)。
也就是,左右占位的字符,都必须是 \w。
或者说 所有不能被\b匹配的 边界。
console.log('0aZ_'.replace(/\B/g, '.')) // 0.a.Z._
console.log('a+a'.replace(/\B/g, '.')) // a+a.
console.log('a a'.replace(/\B/g, '.')) // a a
举列
1.单词边界
var str = ' 2 ';//其中空格与2之间的位置叫做单词边界,匹配\b
2.非单词边界
var str = ",,,,,和呵呵,,,,,";
var reg = '\B呵\B';//reg匹配中间的呵,其两侧都是字符,中间的位置为非单词边界。
3.统计以“,”分割的元素中“3”的个数
var test = "137,1,33,4,3,6,21,3,35,93,2,98";
var count = test.match(test, "\b3\b").length; //结果:2
4.千分位分割数字,将输出成7,654,321这样的格式
'7654321'.replace(/\B(?=(\d{3})+(?!\d))/g,',')
//7,654,321(匹配末尾是非数字,中间是连续3位数字整倍数的非单词边界)
'99893'.replace(/\B(?=(\d{3})+$)/g, ',')
// '99,893'
5.手机号344分割
'12345678901'.replace(/\B(?=(?:\d{4})+$)/g, '-')
// '123-4567-8901'
总结
到此这篇关于正则表达式中边界\b和\B的文章就介绍到这了,更多相关正则表达式边界\b和\B内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://blog.csdn.net/u012961419/article/details/107462741
栏目列表
最新更新
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
Java使用poi生成word文档的简单实例
计算机二级考试MySQL常考点 8种MySQL数据库
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比