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 ! ^ ^ ^ ^ ^ ^ ^ ^ ^ ^