问题:想要匹配字符串“hello_www_1207” 中的www(即以"hello_"开头,"_1207字"结尾的中间的全部字符)
1.正向欲查
形式:(?=pattern) --------要匹配的字符串,后面必须紧跟着pattern,但括号里的内容并不参与真正的匹配结果
例子:
var reg = /^hello_.*(?=_1207)/;
var str = "hello_www_1207";
var result = reg.exec(str);
结果:hello_www
注:JavaScript里的正则不支持(?=xx)xxx的模式,只支持xxx(?=xx)的模式
2.由于js不支持(?=xx)xxx的模式,所以只能将hello_后边的内容作为子正则表达式,再在后面引用
例:
var reg = /^hello_(.*)_1207/;
var str = "hello_www_1207";
var result = reg.exec(str);
结果:hello_www_1207,www ------www是子正则表达式(即括号内匹配的结果)
解决办法:
var reg = /^hello_(.*)_1207/;
var str = "hello_www_1207";
if(reg.test(str )){
result = str.replace(reg, "$1");
}
alert(result);
结果:www
结论:$1,表示引用第一个子正则表达式的内容
补充:
regExp对象方法:
exec:检索字符串中指定的值。返回找到的值,并确定其位置。
text:仅仅检查是否能够匹配str,并且返回布尔值以表示是否成功
compile:编译正则表达式。
支持正则表达式的string对象方法:
replace:替换与正则表达式匹配的子串。
split:把字符串分割为字符串数组。
match:找到一个或多个正则表达式的匹配。
search:检索与正则表达式相匹配的值。