JavaScript正则表达式基础:常用方法详解与实战

作者:小括号

时间:2026-10-29

浏览:553

本文系统介绍JavaScript中正则表达式的创建方式及test、search、match、replace四个核心方法。通过对比传统字符串处理与正则实现的效率差异,详细解析各方法的语法、参数含义及全局匹配等关键特性,帮助开发者掌握高效处理字符串的技巧。

文章目录

正则表达式的优势与创建方式

正则表达式的优势究竟体现在何处?首先我们通过一个具体案例进行直观了解: 在JavaScript中,若需从字符串中提取数字,传统做法是编写如下函数:


 var str='dgh6a567sdo23ujaloo932';
   function getNumber(obj){
     var arr=[];
     for (var i = 0; i < obj.length; i++) {
       if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
           arr.push(obj.charAt(i));
         }
     }
     return arr;
   };
   console.log(getNumber(str));  //["6", "5", "6", "7", "2", "3", "9", "3", "2"]

上述方法虽然能提取出字符串中的数字,但结果仅为单个字符数组。若期望获得如['6','567','23','932']这样的连续数字数组,则需对函数逻辑进行如下改造:


function getNumber(obj){
    var arr=[];
    var temp='';
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          temp+=obj.charAt(i);//现将相邻的数字连接起来
        }
        else{ //每当连接的数字断开时,就在这执行
          if (temp) {
            arr.push(temp);
            temp='';
          }
        };
    }
    if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
            arr.push(temp);
            temp='';
          }
    return arr;
  };

接下来,我们展示如何利用正则表达式实现相同的功能:


function getNumber2(obj){
    var arr=[];
    var re=/\d+/g;
    arr.push(obj.match(re));
    return arr;
  };

以下是程序运行的完整结果对比:


<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'>
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6a567sdo23ujaloo932';
  /*function getNumber(obj){
    var arr=[];
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          arr.push(obj.charAt(i));
        }
    }
    return arr;
  };*/
  function getNumber(obj){
    var arr=[];
    var temp='';
    for (var i = 0; i < obj.length; i++) {
      if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){
          temp+=obj.charAt(i);//现将相邻的数字连接起来
        }
        else{ //每当连接的数字断开时,就在这执行
          if (temp) {
            arr.push(temp);
            temp='';
          }
        };
    }
    if (temp) { //这里的作用是为了显示最后数字的,原因不想解释
            arr.push(temp);
            temp='';
          }
    return arr;
  };
  function getNumber2(obj){
    var arr=[];
    var re=/\d+/g;
    arr.push(obj.match(re));
    return arr;
  };
  console.log(getNumber(str));
  console.log(getNumber2(str)); 
};
</script>
<body>
</body>
</html>

通过上述示例可见,正则表达式在实现相同功能的同时,代码更为精简且执行效率更高,这正是正则表达式的核心价值所在。 正则表达式旨在更高效地处理字符串,其功能与传统字符串处理方法一致,但具备更高的简洁性与效率(注:正则表达式仅适用于字符串处理)。

下面我们将系统学习正则表达式中几个常用的方法:

在此之前,先了解正则表达式的创建语法。正则对象与Array、Object、Date等对象的初始化方式类似,主要有两种创建形式: var re=/匹配内容/; //此为正则对象的简写形式,若不写内容则等价于注释符号;后续文章中我将统一使用此简写形式。 var re=new RegExp(); //此为构造函数创建方式,同样可行,区别仅在于参数传递方式不同。

正则表达式常用方法详解

(1)test方法

含义:利用正则表达式匹配字符串,若匹配成功则返回true,否则返回false; 语法:re.test(字符串); 首先介绍转义字符的概念: /s表示空格 /S表示非空格 /d表示数字 /D表示非数字 /w表示字符(包括字母、数字、下划线) /W表示非字符。 示例:判断一个字符串是否完全由数字组成。


<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6a567sdo23ujaloo932';
  var str2='123456';
  function allNumber(obj){
    var re=/\D/;//定义正则对象匹配非数字,只要有不是数字的就是匹配结束返回结果
    if (re.test(obj)) {
      alert('不全是数字');
    }
    else{
      alert('全是数字');
    };
  };
  allNumber(str);
  allNumber(str2);

};
</script>
<body>
</body>
</html>

(2)search方法

含义:利用正则表达式匹配字符串,若匹配成功则返回匹配项的起始位置,否则返回-1;其功能与字符串处理方法中的indexOf()类似。 语法:字符串.search(re); [color=Red]注意:正则表达式默认区分大小写,若需忽略大小写匹配,需添加标识i;[/color] 示例:进行不区分大小写的字符串字符匹配。


<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6b567sdo23ujaloo932';
  function searchStr(obj){
    var re=/B/i;//定义正则对象匹配b字符,不区分大小写
    alert(obj.search(re));  
  };
  searchStr(str);
};
</script>
<body>
</body>
</html>

(3)match方法

含义:利用正则表达式匹配字符串,若匹配成功则返回包含匹配结果的数组,否则返回Null。 语法:字符串.match(re); [color=Red]注意:正则表达式默认在匹配成功后即返回相应值并停止后续匹配。若需查找所有匹配项,需添加标识g(全局匹配);[/color] 示例:匹配字符串中的连续数字,并将每个连续数字序列作为数组的一项存入结果数组。

代码中的“+”表示匹配至少出现一次的字符,为何需要这样做? 前文已提及“正则表达式默认匹配成功后即结束返回”,若不使用“+”,当字符串中匹配到一个单独数字时便会停止,仅将该数字存入数组。而我们的需求是获取所有连续数字序列,因此需配合g标识进行全局匹配。 此外,连续数字的个数并不固定,使用“+”即可满足动态匹配数字个数的需求。


<!DOCTYPE>
<html>
<head>
  <meta charset='utf-8'> 
  <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
  var str='dgh6b567sdo23ujaloo932';
  function searchStr1(obj){
    var re=/\d/;  
    return obj.match(re);
  };
  function searchStr2(obj){
    var re=/\d/g;  
    return obj.match(re);
  };
  function searchStr3(obj){
    var re=/\d\d/g;//全局匹配2位数  
    return obj.match(re);
  };
  function searchStr4(obj){
    var re=/\d+/g;  
    return obj.match(re);
  };
  console.log(searchStr1(str));
  console.log(searchStr2(str));
  console.log(searchStr3(str));
  console.log(searchStr4(str));

};
</script>
<body>
</body>
</html>

(4)replace方法

含义:利用正则表达式匹配字符串,将匹配成功的字符串替换为新的字符串。 语法:字符串.replace(re); 示例:将字符串中所有的字符a替换为字符b。


<!DOCTYPE>
<html>
<head>
 <meta charset='utf-8'> 
 <title></title>
</head>
<script type="text/javascript">
window.onload=function(){
 var str='daah6b5a7sdo23ujaloo932';
 function replaceStr(obj){
  var re=/a/g; //全局匹配a
  return obj.replace(re,'b');
 };
 console.log(replaceStr(str));
};
</script>
<body>
</body>
</html>

本文内容暂述至此,后续将持续更新。

以上即为本文的全部内容,希望对大家有所启发。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章