JavaScript的正则中关于 (?=exp) 的用法

(?=exp)指的是匹配表达式前的位置,所谓“位置”就是指字符与字符之间的位置,因为是个位置,所以匹配后得到的宽度为0。

 

实例1:限定长度的正则

var re = /^\S*$/; // 我们匹配任意非空白符的字符串

re.test('JavaScript'); // true

re = /^(?=.{2,4}$)\S*$/; // 我们限定这个字符串长度只能是2-4

re.test('JavaScript'); // false

 (?=.{m,n}&) 描述的就是m-n个长度字符串的第一个字符的前面那个位置,所以这段正则可以加在任意正则之前来做限定,也不会对后面的匹配有任何影响,非常实用。

 

实例2:利用正则向字符串插入内容

var foo = '123456789'; // 目标是插入分隔符,变为123,456,789

var re = /(?=(\d{3})+$)/g; // 匹配所有距离结尾3位数字的N倍数的位置

foo.replace(re, ','); // 输出 ,123,456,789 因为123前这个位置也符合上面正则

// 来自群里abcd
re = /\B(?=(\d{3})+$)/g; // \b是指词的左右2处位置 \B是除\b以外的位置

foo.replace(re, ','); // 123,456,789

 

------------------------------------

附赠\b与\B区别 (来源http://stackoverflow.com/questions/4541573/what-are-non-word-boundary-in-regex-b-compared-to-word-boundary

\b的位置
 H e l l o ,   w o r l d !
^         ^   ^         ^ 

\B的位置
 H e l l o ,   w o r l d !
  ^ ^ ^ ^   ^   ^ ^ ^ ^   ^

 

转载于:https://www.cnblogs.com/qdwang/archive/2012/04/12/2444254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值