JavaScript正则表达式(一)——基本语法和方法

1.定义及概念

  正则表达式(Regular Expression),又称规则表达式,是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。它是一种文本模式(即字符串结构),该模式描述在搜索文本时要匹配的一个或多个字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。

2.目的

  通过一个给定的正则表达式和一个字符串,可以达到:
  ①验证给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
  ②通过正则表达式,从字符串中 提取我们想要的特定部分,比字符串的split、replace等方法更方便;

3.语法

  1. 创建正则表达式

    RegExp( )函数

   var pat=new RegExp('a');//匹配包含a的字符串
   var str=prompt("")
   console.log(pat.test(str));

   ==>输入"abcd",返回

true

   ==>输入"bcd",返回

false

  test( )是正则表达式里的一种方法,语法:规则.test(字符串);  返回一个布尔值
  ②字面量表达式

   var pat=/a/ //匹配包含a的字符串
   var str=prompt("")
   console.log(pat.test(str));

   ==>输入"abc",返回

true

   ==>输入"bc",返回

false

  二者的区别: ①字面量表达式在进行编译时就会自动新建正则表达式;②RegExp( )函数在运行时新建正则表达式;所以字面量表达式的效率更高,并且直观便利,所以在实际应用中,一般会使用字面量表达式。

  • RegExp( )函数还可以接收第二个参数,表示修饰符
   var reg=new RegExp('abc',i)
   //等价于
   var reg=/abc/i;
  • 当正则表达式为空字符时 代表匹配所有字符
   var str=prompt()
   var pat=new RegExp('')
   console.log(pat.test(str));
  1. 修饰符
      JavaScript里支持“i”、“g”、“m”三个修饰符
修饰符说明
iinsensitive的缩写,定义不区分大小写字母
gglobal的缩写,定义全局匹配,即在指定字符串范围内执行所有匹配
mmultiline的缩写,定义多行字符串匹配

4. 正则的方法

  1. RegExp.test( )
      test方法返回一个布尔值,表示当前是否能匹配参数字符串。
   var str='I like cats.'
   var reg=/cat/ //验证是否包含cat
   console.log(reg.test(str));

true

  正则对象的lastIndex属性

  • 如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配
   var reg = /x/g;
   var str = '_x_x_x';
   console.dir(reg);//查看reg对象的方法
    
   console.log(reg.lastIndex) // 0 第一次位置从0开始查找
   console.log(reg.test(str)) // true
   console.log(reg.lastIndex) // 2 上一次test搜索时,找到的值的位置是2

   console.log(reg.test(str)) // true
   console.log(reg.lastIndex) // 4

   console.log(reg.test(str)) // true
   console.log(reg.lastIndex) // 6

   console.log(reg.test(str)) // false 搜索不到了
   console.log(reg.lastIndex) // 0  lastIndex属性重置为0,回到位置0

   console.log(reg.test(str)) // true 再次从0搜索
   console.log(reg.lastIndex) // 2 第二轮搜索

  g修饰符,表示全局搜索,会返回多个结果。上面五次使用test方法,每一次开始搜索的位置都是上一次匹配的后一个位置。

  • 带有g修饰符时,可以通过正则对象的lastIndex属性指定开始搜索的位置
   var reg=/x/g
   var str='_x_x'
   reg.lastIndex=4
   console.log(reg.test(str));//false

   console.log(reg.lastIndex);//0
   console.log(reg.test(str));//true

  指定从字符串的第五个位置开始搜索,这个位置为空,所以返回false。同时,lastIndex属性重置为0,所以第二次执行r.test(s)会返回true。

   注意: 带有g修饰符时,正则表达式内部会记住上一次的lastIndex属性,这时不应该更换所要匹配的字符串,否则会有一些难以察觉的错误。

   var reg = /aa/g;
   reg.test('aa') // true
   reg.test('-aa-') // false

  上面代码中,由于正则表达式reg是从上一次的lastIndex位置开始匹配,导致第二次执行test方法时出现预期以外的结果。

  1. RegExp.exec( )

  exec方法用于返回匹配结果,当匹配到时,返回一个数组,数组元素是匹配到的子字符串;当没有匹配到时,返回null

   var str=prompt()
   var pat=/a/g
   console.log(pat.exec(str));

   ==>输入"abcd",返回

  exec方法返回数组的两个属性:
   >input:整个原字符串;
   >index:匹配到的子字符串的开始位置(从0开始计数);

  如果正则表达式包含圆括号(即含有“组匹配”)时,返回的数组会包括多个成员
    >第一个成员:整个匹配成功的结果,后面的成员就是圆括号对应的匹配成功的组;
    >第二个成员:对应第一个括号;
    >第三个成员:对应第二个括号,以此类推;
    >整个数组的length属性:等于组匹配的数量再加1;

   var str='_x_x';
   var reg=/_(x)/;
   console.log(reg.exec(str))

  exec( )方法和字符串的match( )方法的区别:
   >非全局模式下:exec( )方法返回的数组与String.match( )方法返回的数组是相同的;
   >全局模式下:exec( )方法与String.match( )方法返回的结果不同。当调用 exec( )方法 时,会为正则表达式对象定义lastIndex属性,执行下一次匹配的起始位置,同时返回匹配数组,与非全局模式下的数组结构相同;而 String.match( ) 仅返回匹配文本组成的数组,没有附加信息。
   所以,在全局模式下获取完整的匹配信息只能用exec( )方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m_sy530

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值