前端路上的各种问题-javascript—5

1、正则表达式的分组

 var s="ab=1,bc=54,cd=43"

/*因为这里有g,所以输出[ab=12,bc=54,cd=43]*/
var reg=/(\w+)=(\d*)/g;

/*这里没有g,所以数组里面会保存分组的信息,同时只会返回第一个匹配的结果[ab=12,ab,cd]*/
var reg1=/(\w+)=(\d*)/;

var s3="<h1>hello h1 <h1><html> this is html<html>";
var reg3=/(<\/?\w+>).*\1/g;
var result3=s3.match(reg3);
/*用\n代表第n个括号里面的子表达式,n表示从左数第几个空格,返回结果[<h1>hello h1 <h1>,<html> this is html<html>]*/


2,正则表达式的反向引用

/*正则表达式反向引用,通过RegExp.$1,RegExp.$2来引用相应的分组的信息,可用在test,match,search方法*/
var s="abcd";
var reg=/(\w)(\w)(\w)/;
reg.test(s);
alert(RegExp.$1);

/*在定义的分组中使用反向引用*/
var s1="abab";
var reg1=/(\w)(\w)\1\2/;
alert(reg1.test(s1));//返回true

/*在replace方法中使用反向引用,11aa22bb3c4d4e6f,主要理解正则表达式的原理和回溯机制*/
var s2="aa11bb22c3d4e5f6";
var reg2=/(\w+?)(\d+)/g;
var result2=s2.replace(reg2,"$2$1");
alert(result2);


3.多行正则表达式匹配

/*其中\n表示换行*/
var s="a\nb\nc";

var r=/\w+$/g;

var r1=/\w+$/gm;

//var result=s.match(r);//输出的结果只有[c]因为不支持多行匹配

var result1=s.match(r1);//通过设置为gm,可以匹配多行[a,b,c],但是通过RegExp.multiline=true在Opera,Chrome,IE,FF中都没通过,都是返回[c]


4.match方法和exec方法的区别(两者都返回数组)

   exec方法是以字符串为参数的RegExp对象方法,match是以正则表达式为参数的String对象方法,在非全局模式下,他们的返回值是相同的!在全局模式下,exec方法会会定义一个lastIndex属性,表示下一次要开始的搜索的位置,当返回值为null的时候,表示字符串检验完毕,因此该方法可以获取完整的匹配信息。

var s="javascript";
 var reg=/\w/g;
while((a=reg.exec(s))!=null)
{
  alert(a[0]+"\n"+a.index+"\n"+reg.lastIndex);//要注意a[0]表示exec每次返回的结果,是一个string类型,但是a是一个数组,也就是说exec的返回值是一个数组,a.index表示返回值的下标,reg.lastIndex是下一次要搜索的位置
};





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值