正则表达式再思考(待续)
最近在使用正则表达式的g标志时出现了错误,索性就把正则表达式在总结下,算是加强理解吧!
1、创建正则表达式
1.1使用正则表达式字面量(即//)来创建
var reg = /(.)at/g;
1.2使用构造函数(RegExp)
var reg = new RegExp('(.)at','g');
1.3上述二种方法的不同
1.3.1、表达式中存在元字符(例如[、|等)
前者: var reg = /\.at/g //匹配 .at;后者:var reg = new RegExp('\\.at','g');
2.标志g的用法
正则表达式带上g表示应用于所以符合条件的字符串,而不是在发现第一个匹配项后就停止匹配。所以此情况下lastIndex属性会随着表达式的使用发生变化。例如:
案例二:
邮箱: ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
URL:[http|https|ftp]:////[^\s]+复杂点的:/ [http|https|ftp]:////([\w-]+\.)([\w-]+)(\?[\w=&]*)?
IP地址:((25[0-4]|2[0-4]\d|[01]?\d\d?)\.) {3}(25[0-4]|2[0-4]\d|[01]?\d\d?)
QQ:[1-9]\d{4,}
HTML: <(^[a-z][a-z 0-9"])>\w*<\/\1>|<^[a-z][a-z 0-9"] \/>
年-月-日: (^[1-9]\d{3})-(1[0-2]|0?[1-9])-(3[0-1]|[12][0-9]|0?[1-9])
汉字: [\u4e00-\u9fa5]
大陆手机号: 1\d{10}
大陆身份证号: ^[1-9]\d{14}$|^[1-9]\d{16}[1-9xX]$
非负整数: \d+
正整数:^[1-9]\d*
负整数: ^-[1-9]\d*
整数:^-?\d*
小数: (-?\d*)(\.\d+)?
4.使用正则表达式不错的案例
1 请编写一个JavaScript 函数toRGB,它的作用是转换CSS中常用的颜色编码。 要求: 2 3 alert(toRGB("#0000FF")); // 输出 rgb(0, 0, 255) 4 alert(toRGB("invalid")); // 输出 invalid 5 alert(toRGB("#G00")); // 输出 #G00 6 7 function toRGB(val){ 8 var reg1 = /^#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i; 9 var reg2 = /^#([0-9A-F])([0-9A-F])([0-9A-F])$/i; 10 var reg3 = /[0-9A-F]{2}/g; 11 if(reg2.test(val)){ 12 val = val.replace(reg2,"$1$1$2$2$3$3"); 13 } 14 15 if(reg1.test(val)){ 16 var match = val.match(reg3); 17 val = 'rgb('+[parseInt(match[0],16),parseInt(match[1],16),parseInt(match[2],16)].join(',')+')'; 18 } 19 20 return val; 21 }