javascript中的正则表达式使用详解(3)

[7]实例方法:
  [7.1]exec():专门为捕获组而设计,接受一个参数,即要应用模式的字符串。然后返回包含第一个匹配项信息的数组。在没有匹配项的情况下返回null。返回的数组包含两个额外的属性:index和input。index表示匹配项在字符串的位置,input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串,如果模式中没有捕获组,则该数组只包含一项

var text = 'mom and dad and baby and others'; var pattern = /mom( and dad( and baby)?)?/gi; var matches = pattern.exec(text); console.log(pattern,matches); //pattern.lastIndex:20 //matches[0]:'mom and dad and baby' //matches[1]:' and dad and baby' //matches[2]:' and baby' //matches.index:0 //matches.input:'mom and dad and baby and others'

  [注意1]对于exec()方法而言,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项
  [注意2]在不设置全局标志的情况下,在同一个字符串上多次调用exec(),将始终返回第一个匹配项的信息
  [注意3]在设置全局标志的情况下,每次调用exec()都会在字符串中继续查找新匹配项
  [注意4]IE8-的js实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会变化

var text = 'cat,bat,sat,fat'; var pattern1 = /.at/; var matches = pattern1.exec(text); console.log(pattern1,matches); //pattern1.lastIndex:0 //matches[0]:'cat' //matches.index:0 //matches.input:'cat,bat,sat,fat' matches = pattern1.exec(text); console.log(pattern1,matches); //pattern1.lastIndex:0 //matches[0]:'cat' //matches.index:0 //matches.input:'cat,bat,sat,fat'

var text = 'cat,bat,sat,fat'; var pattern2 = /.at/g; var matches = pattern2.exec(text); console.log(pattern2,matches); //pattern2.lastIndex:3 //matches[0]:'cat' //matches.index:0 //matches.input:'cat,bat,sat,fat' matches = pattern2.exec(text); console.log(pattern2,matches); //pattern2.lastIndex:7 //matches[0]:'bat' //matches.index:4 //matches.input:'cat,bat,sat,fat'

  [tips]用exec()方法找出匹配的所有位置和所有值

var string = 'j1h342jg24g234j 3g24j1'; var pattern = /\d/g; var valueArray = [];//值 var indexArray = [];//位置 var temp = pattern.exec(string); while(temp != null){ valueArray.push(temp[0]); indexArray.push(temp.index); temp = pattern.exec(string); } console.log(valueArray,indexArray);

[7.2]test():接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false
  [注意]常用于只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况,经常用在if语句中

var text = '000-00-000'; var pattern = /\d{3}-\d{2}-\d{4}/; if(pattern.test(text)){ console.log('The pattern was matched'); }

[8]模式匹配方法
  [8.1]match():只接受一个参数,正则或字符串,把匹配的内容保存到一个数组中返回
  [注意]加上全局标记时,match()方法返回值中没有index和input属性 
    [a]不加/g

var string = 'cat,bat,sat,fat'; var pattern = /.at/; var matches = string.match(pattern); console.log(matches,matches.index,matches.input);//['cat'] 0 'cat,bat,sat,fat'

    [b]加/g

var string = 'cat,bat,sat,fat'; var pattern = /.at/g; var matches = string.match(pattern); console.log(matches,matches.index,matches.input);//['cat','bat','sat','fat'] undefined undefined

    [c]字符串

var string = 'cat,bat,sat,fat'; var pattern = 'at'; var matches = string.match(pattern); console.log(matches,matches.index,matches.input);//['at'] 1 'cat,bat,sat,fat'

  [8.2]search():只接受一个参数,正则或字符串,返回匹配的内容在字符串中首次出现的位置,类似于不能设置起始位置的indexOf,找不到返回-1
    [a]正则(加/g和不加/g效果一样)

var string = 'cat,bat,sat,fat'; var pattern = /.at/; var pos = string.search(pattern); console.log(pos);//0

    [b]字符串

var string = 'cat,bat,sat,fat'; var pattern = 'at'; var pos = string.search(pattern); console.log(pos);//1

    [tips]找出匹配的所有位置

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wggjdf.html