比如,将数字凑2位:
例1 document.write("1,2,3,4,10,11,8,9".replace(/(^\D)(\d)(\D$)/gi,"$10$2$3"));
结果 01,2,03,4,10,11,08,9
不成功。没有使用前瞻,由于定界符被占用,导致部分没有替换
例2 document.write("1,2,3,4,10,11,8,9".replace(/(\d)(?!\d)/gi,"0$1"));
结果 01,02,03,04,100,101,08,09
不成功。数字前不加定界符,导致本身有2位的也加了
例3 document.write("1,2,3,4,10,11,8,9".replace(/(^\D)(\d)(?!\d)/gi,"$10$2"));
结果 01,02,03,04,10,11,08,09
正确,用负向前瞻,匹配了结尾符
例4 document.write("1,2,3,4,10,11,8,9".replace(/(^\D)(\d)(?=(?:\D$))/gi,"$10$2"));
结果 01,02,03,04,10,11,08,09正确,用正向前瞻,并不匹配结尾符,所以要加上$
附注:
JS 不支持后瞻,故不能用 (?<!\d) 和 (?<=\d) 放在开头,来匹配以某格式开头其后的字符。
但可以用前瞻处理部分问题,比如:汽车车牌除第一个字符是中文外,其他的地方必须是数字和字母,可用以下办法剔除
document.write("鄂A-D1乱23码45".replace(/(?!^)([^0-9A-Z])/gi,"");
结果 鄂A-D12345