[正则表达式]基础工具书篇 关于边界

写在之前:以下所有的元字符,匹配的不是实际的字符,而是一个“虚”的位置。

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)替换(插入)为一个逗号。

你可能感兴趣的:(正则表达式)