[正则表达式]基础工具书篇 关于边界
Posted wei4118268
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[正则表达式]基础工具书篇 关于边界相关的知识,希望对你有一定的参考价值。
写在之前:以下所有的元字符,匹配的不是实际的字符,而是一个“虚”的位置。
1. 整体边界
1. 匹配起始位置的 ^
^
写在字符集中第一个方括号的后边,表示“非”。^
写在整个正则表达式的最前边,则表示匹配输入字符串的起始位置,即开头。简单的说,就是以什么什么为开头。
比如,我们想要通过正则表达式匹验证手机号码。
如果我们使用正则表达式 1[35789]\\d{9}
去匹配,会把 00015599998888
这样的字符串验证通过。因为我们确实可以在这个字符串中,匹配出符合这个正则的字符串。
单纯的为了防止在开头多几位数的错误手机号通过验证,我们应该将正则表达式修改为 ^1[35789]\\d{9}
。即只有以 13
15
17
18
19
开头的,且能在其后匹配出9个数字的字符串,可以验证通过。
2. 匹配结束位置的 $
$
写在整个正则表达式的最后边,则表示匹配输入字符串的结束位置,即末尾。简单的说,就是以什么什么为结尾。
返回上边的例子,正则表达式,已经被优化为 ^1[35789]\\d{9}
。
但是细心的人会发现,1559999888866666
这样的字符串还是会验证通过。为了保证手机号只有11为,我们应该将正则表达式修改为 ^1[35789]\\d{9}$
。
即只有以 13
15
17
18
19
开头的,且后边只有9个数字就结束的,可以验证通过。
3. \\b
与 \\B
\\b
用来匹配单词(数字)的边界,比如单词与符号之间、单词与空格之间的位置等。
用严谨一点的说法,就是\\w
和\\W
之间的位置(尚未考究)。
虽说是边界,但是匹配的只是一个虚的位置(可以想象为\\w
与\\W
两个字符中间的那个缝隙),而不是实际的字符。
\\B
则反过来,匹配非单词的边界,即\\w
和\\w
之间的位置,或\\W
和\\W
之间的位置。
也就是单词(数字)中两个相邻字符中间的那条缝隙,或者两个符号中间的那条缝隙。
同样,匹配的是一个虚的位置。
利用这两个符号,我们最常做的,就是利用 replace
,在字符串中插入字符。
举一个最经典的例子,数字的三位分节法:
//js
"1234567890".replace(/\\B(?=(?:\\d{3})+$)/g,",")
//"1,234,567,890"
(?=(?:\\d{3})+$)
是一个正向预查,表示 我们要匹配的\\B
,的后边的数字必须是三个一组三个一组(有最少一组)来结尾的。
满足这样条件的,数字之间的缝隙(非单词边界),全部(正则后有全局修饰符g
)替换(插入)为一个逗号。
以上是关于[正则表达式]基础工具书篇 关于边界的主要内容,如果未能解决你的问题,请参考以下文章