JavaScript RegExp 对象核心方法与属性详解

作者:拾光

时间:2026-10-29

浏览:424

本文详解JavaScript中RegExp对象的核心用法,包括test方法的匹配判断、toString与toLocaleString的输出格式、构造函数属性(如input、lastMatch)及$1-$9子匹配引用。重点解析exec方法的返回值结构、index与lastIndex属性在循环匹配中的行为,以及捕获组在嵌套正则中的处理逻辑。

文章目录

RegExp.test() 方法匹配检测

正则表达式的test()方法用于检测字符串是否匹配给定的正则表达式。该方法返回一个布尔值,若匹配成功则返回true,否则返回false。例如,定义文本字符串"cat, bat, sat, fat"和正则模式/.at/,调用pattern.test(text)会返回true,因为字符串中包含匹配项。此时可执行相应逻辑,如弹出提示"The pattern was matched."。


var text = "cat, bat, sat, fat";  
  var pattern = /.at/;
  
  if (pattern.test(text)){
   alert("The pattern was matched.");
  }

正则对象的字符串表示

正则对象的toString()和toLocaleString()方法均用于返回正则表达式的字符串表示形式,格式为/图案/标志。例如,通过构造函数new RegExp("\\[bc\\]at", "gi")创建的正则对象,调用toString()和toLocaleString()均返回/\[bc\]at/gi,展示了模式与全局、不区分大小写标志的组合结果。


var pattern = new RegExp("\\[bc\\]at", "gi");
  alert(pattern.toString()); // /\[bc\]at/gi
  alert(pattern.toLocaleString()); // /\[bc\]at/gi

RegExp构造函数静态属性

RegExp构造函数提供了一系列静态属性,用于获取最近一次正则匹配的相关信息。这些属性包括:input(保存原始被搜索的字符串)、lastMatch(保存最近一次匹配的字符串)、lastParen(保存最近一次匹配的捕获组)、leftContext(保存匹配字符串左侧的内容)和rightContext(保存匹配字符串右侧的内容)。需要注意的是,Opera浏览器不支持input、lastMatch、lastParen和multiline属性,而Internet Explorer不支持multiline属性。


 var text = "this has been a short summer";
  var pattern = /(.)hort/g;
  
  /*
   * Note: Opera doesn't support input, lastMatch, lastParen, or multiline.
   * Internet Explorer doesn't support multiline.
   */  
  if (pattern.test(text)){
   alert(RegExp.input);    //this has been a short summer
   alert(RegExp.leftContext);   //this has been a   
   alert(RegExp.rightContext);  // summer
   alert(RegExp.lastMatch);   //short
   alert(RegExp.lastParen);   //s
   alert(RegExp.multiline);   //false
  }
  input      保存被搜索的字符串
  index      保存匹配的首字符的位置
  lastIndex     保存匹配的字符串下一个字符的位置
  lastMatch     保存匹配到的字符串
  lastParen     保存最后一个被匹配的字符串(最后一个括号内的内容)
  leftContext    保存匹配字符串左边的内容
  rightContext   保存匹配字符串右边的内容
  $1~$9   保存最开始的9个子匹配(括号中的内容)

 var text = "this has been a short summer";
  var pattern = /(.)hort/g;
  
  /*
   * Note: Opera doesn't support short property names.
   * Internet Explorer doesn't support multiline.
   */  
  if (pattern.test(text)){
   alert(RegExp.$_);    //this has been a short summer
   alert(RegExp["$`"]);   //this has been a   
   alert(RegExp["$'"]);   // summer
   alert(RegExp["$&"]);   //short
   alert(RegExp["$+"]);   //s
   alert(RegExp["$*"]);   //false
  }
  * 分为长属性名和短属性名
  * input   $_  最近一次要匹配的字符串
  * lastMatch  $&  最近一次的匹配项
  * lastParen  $+  最近一次匹配的捕获组
  * leftContext  $`  input字符串中lastMatch之前的文本
  * multiline  $*  布尔值,表示是否所有表达式都使用多行模式。
  * rightContext $'  input字符串中lastMatch之后的文本

$1至$9捕获组引用

除了上述静态属性,RegExp还通过$1到$9属性保存正则表达式中前九个捕获组(即括号内的子匹配)的内容。每当执行一次成功的带括号匹配时,这些属性的值会被更新为最新的捕获组内容。即使正则表达式中包含多个捕获组,系统也仅存储最新的九个匹配结果。


 var text = "this has been a short summer";
  var pattern = /(..)or(.)/g;
    
  if (pattern.test(text)){
   alert(RegExp.$1);  //sh
   alert(RegExp.$2);  //t
  }
  每当产生一个带括号的成功匹配时,$1...$9 属性的值就被修改。 
  可以在一个正则表达式模式中指定任意多个带括号的子匹配,但只能存储最新的九个。

RegExp.exec() 方法详解

RegExp的exec()方法用于在字符串中执行匹配搜索,返回一个包含匹配信息的数组。该数组包含index属性(匹配项在字符串中的起始位置)、input属性(原始字符串)以及按捕获组顺序排列的匹配值。例如,在文本"mom and dad and baby"中匹配/mom( and dad( and baby)?)?/gi,exec()返回的数组中,matches[0]为完整匹配"mom and dad and baby",matches[1]为" and dad and baby",matches[2]为" and baby",index为0。


var text = "mom and dad and baby";
  
  var pattern = /mom( and dad( and baby)?)?/gi;
  var matches = pattern.exec(text);
  
  alert(matches.index); //0 第一个被匹配到的位置
  alert(matches.input); //"mom and dad and baby" 匹配的原始字符串
  alert(matches[0]);  //"mom and dad and baby" 匹配的第一个值
  alert(matches[1]);  //" and dad and baby" 匹配的第二个值
  alert(matches[2]);  //" and baby"   匹配的第三个值

 var text = "cat, bat, sat, fat";  
  var pattern1 = /.at/;
  
  var matches = pattern1.exec(text);  
  alert(matches.index); //0
  alert(matches[0]);  //"cat"
  alert(pattern1.lastIndex);//0

  matches = pattern1.exec(text);  
  alert(matches.index); //0
  alert(matches[0]);  //"cat"
  alert(pattern1.lastIndex);//0

  var pattern2 = /.at/g;
  
  var matches = pattern2.exec(text);  
  alert(matches.index); //0
  alert(matches[0]);  //"cat"
  alert(pattern2.lastIndex);//0

  matches = pattern2.exec(text);  
  alert(matches.index); //5
  alert(matches[0]);  //"bat"
  alert(pattern2.lastIndex);//0

RegExp实例属性:index与lastIndex

RegExp实例属性主要包括index和lastIndex。index表示当前匹配在字符串中的位置,而lastIndex指定下次匹配开始的字符位置,仅在使用全局标志(g)时有效。例如,对文本"cat, bat, sat, fat"使用非全局正则/.at/,exec()返回匹配"cat",index为0,lastIndex保持为0。若使用全局正则/.at/g,第一次exec()匹配"cat"后,lastIndex更新为3("cat,"的长度),第二次调用exec()将从位置3开始搜索,匹配"bat",此时index为5,lastIndex更新为8。


 var pattern1 = /\[bc\]at/i;
  
  alert(pattern1.global);  //false //是否设置全局查找
  alert(pattern1.ignoreCase); //true 是否忽略大小写
  alert(pattern1.multiline); //false 是否设置多行查找
  alert(pattern1.lastIndex); //0  一个整数,标示开始下一次匹配的字符位置。
  alert(pattern1.source);  //"\[bc\]at" 正则表达式的源文本。

  var pattern2 = new RegExp("\\[bc\\]at", "i");
  
  alert(pattern2.global);  //false
  alert(pattern2.ignoreCase); //true
  alert(pattern2.multiline); //false
  alert(pattern2.lastIndex); //0
  alert(pattern2.source);  //"\[bc\]at"

以上为JavaScript中RegExp对象常用方法与属性的学习总结。通过掌握test、exec方法及各类属性,可以更高效地进行字符串匹配与处理。后续将持续更新相关技术内容,欢迎继续关注。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章