首页 > 编程语言 >JavaScript笔记 - 正则表达式

JavaScript笔记 - 正则表达式

时间:2022-11-02 03:22:06浏览次数:44  
标签:匹配 正则表达式 JavaScript 笔记 字符串 str var RegExp

正则表达式

目录

1. 正则表达式语法

  • 正则表达式可以用来定义字符串的规则,程序可以根据这些规则来判断一个字符串是否符合要求

  • 创建正则表达式

    语法:var reg = /[正则表达式]/[匹配模式] var reg = new RegExp("[正则]","[匹配模式]");

    var patt = /w3school/i;
    

1.1 方括号

  • a|b 表示"或"

    var patt = /a|b/; //a或b都符合条条件
    
  • [a-b] 表示"一定范围内"

    var patt = /[a-l]/; //a到l都符合条件
    
  • [^a] 表示"除外"

    var patt = /[^a]/; //除了a都符合条件
    

1.2 量词

  • {n} 表示"n在字符串中出现的次数"

    +表示"至少一个",相当于{1,}

    *表示"0个或多个",相当于{0,}

    ?表示"0个或一个",相当于{0,1}

    var patt = /ab{3}/; //ab出现3次才符合条件
    var patt = /ab{1,3}/; //ab出现1~3次才符合条件
    var patt = /ab{,3}/; //ab出现3以下次才符合条件
    
  • ^n 表示"以n开头的字符串"

    $n 表示"以n结尾的字符串"

    ?=n表示"紧接n其后的字符串"

    ?!n表示"没有紧接n其后的字符串"

    var patt = /^a/; //匹配开头的a
    var patt = /a$/; //匹配结尾的a
    
    //对其后紧跟 "all" 的 "is" 进行全局搜索
    var str="Is this all there is";
    var patt1=/is(?= all)/g;
    
    //对其后没有紧跟 "all" 的 "is" 进行全局搜索
    var str="Is this all there is";
    var patt1=/is(?! all)/gi;
    

1.3 元字符

元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单词字符(包括a-z、A-Z、0-9、下划线)
\W 查找非单词字符
\d 查找数字
\D 查找非数字字符
\s 查找空白字符
\S 查找非空白字符
var str="Give 100%!";
var patt1=/\w/g;	//G,i,v,e,1,0,0

var str="Give 100%!";
var patt1=/\W/g;	//,%,!

var str="Give 100%!";
var patt1=/\d/g;	//1,0,0

2. RegExp对象属性

  • global:RegExp 对象是否具有标志 g

    ignoreCase:RegExp 对象是否具有标志 i

  • lastIndex:一个整数,标示开始下一次匹配的字符位置

    • 每一次匹配后lastIndex都会被改变,具体变化由匹配模式和修饰符决定

    • 此属性常由方法 RegExp.exec() 和 RegExp.test()改变,可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本

    • 只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0

    • 不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性

    • 如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0

  • source:正则表达式的源文本

3. RegExp对象方法

  • test:检索字符串中指定的值。返回 true 或 false

    var str = "Visit W3School";
    var patt1 = new RegExp("W3School");
    
    var result = patt1.test(str); //true
    
  • exec:检索字符串中指定的值,返回找到的值,并确定其位置

    • 如果 exec() 找到了匹配的文本,则返回一个结果数组,否则,返回 null。

    • 此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推

    • 除了数组元素和 length 属性之外,exec() 方法还返回两个属性:

      index 属性是匹配文本的第一个字符的位置

      input 属性则存放的是被检索的字符串 string

    • 可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的

    • 当 RegExpObject 是一个全局正则表达式时,它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置

      这就是说,可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0

    var str = "Visit W3School"; 
    var patt = new RegExp("W3School","g");
    var result;
    
    while ((result = patt.exec(str)) != null)  {
      document.write(result);
      document.write(" ");
      document.write(patt.lastIndex);
     }	//W3School 14
    

4. 支持正则表达式的 String 对象的方法

  • search():检索与正则表达式相匹配的值,并返回位置

  • match():找到一个或多个正则表达式的匹配

    • 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配

      如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息

      该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本

      除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性表示匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用

    • 如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串,若没有找到任何匹配的子串,则返回 null

      如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性

    • 在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果需要这些全局检索的信息,可以使用 RegExp.exec()

  • replace():替换与正则表达式匹配的子串

  • split():把字符串分割为字符串数组

var str="Visit W3School!";
document.write(str.search(/W3School/)); //6

var str="1 plus 2 equal 3";
document.write(str.match(/\d+/g));	//1,2,3

var str="Visit Microsoft!";
document.write(str.replace(/Microsoft/, "W3School"));	//Visit W3School!

var str="How are you doing today?"
document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
/*
How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you
*/

标签:匹配,正则表达式,JavaScript,笔记,字符串,str,var,RegExp
From: https://www.cnblogs.com/Solitary-Rhyme/p/16849739.html

相关文章