zoukankan      html  css  js  c++  java
  • JavaScript(12):RegExp正则表达式对象

    正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

    搜索模式可用于文本搜索和文本替换。

    一、正则表达式

    正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

    正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。

    语法:

    var patt=new RegExp(pattern,modifiers);

    或者

    var patt=/pattern/modifiers
    • pattern(模式) 描述了表达式的模式
    • modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配

    其中修饰符是可选的。如:

    var patt = /runoob/i

    实例解析:

    /runoob/i  是一个正则表达式。

    runoob  是一个正则表达式主体 (用于检索)。

    i  是一个修饰符 (搜索不区分大小写)。

    二、正则表达式修饰符

    修饰符 可以在全局搜索中不区分大小写:

    • i:执行对大小写不敏感的匹配。
    • g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
    • m:执行多行匹配。

    三、正则表达式模式

    方括号用于查找某个范围内的字符:

    • [abc]:查找方括号之间的任何字符。
    • [0-9]:查找任何从 0 至 9 的数字。
    • (x|y):查找任何以 | 分隔的选项。

    元字符是拥有特殊含义的字符:

    • d:查找数字。
    • s:查找空白字符。
    • :匹配单词边界。
    • uxxxx:查找以十六进制数 xxxx 规定的 Unicode 字符。

    量词:

    • n+:匹配任何包含至少一个 n 的字符串。
    • n*:匹配任何包含零个或多个 n 的字符串。
    • n?:匹配任何包含零个或一个 n 的字符串。

    四、支持正则表达式的 String 对象的方法

    1、search() 方法:用于检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

    使用正则表达式搜索 "Runoob" 字符串,且不区分大小写:

    var str = "Visit Runoob!"; 
    var n = str.search(/Runoob/i);

    输出结果为:6

    search() 方法使用字符串

    search 方法可使用字符串作为参数。字符串参数会转换为正则表达式:

    检索字符串中 "Runoob" 的子串:

    var str = "Visit Runoob!"; 
    var n = str.search("Runoob");

    2、replace() 方法:用于替换一个与正则表达式匹配的子串。

    使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob :

    var str = document.getElementById("demo").innerHTML; 
    var txt = str.replace(/microsoft/i,"Runoob");

    结果输出为:Visit Runoob!

    replace() 方法使用字符串

    replace() 方法将接收字符串作为参数:

    var str = document.getElementById("demo").innerHTML; 
    var txt = str.replace("Microsoft","Runoob");

    正则表达式参数可用在以上方法中 (替代字符串参数)。

    正则表达式使得搜索功能更加强大(如实例中不区分大小写)。

    3、match() 方法:在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

    注意: match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

    在字符串中查找 "ain":

    var str="The rain in SPAIN stays mainly in the plain"; 
    var n=str.match(/ain/g);

    n 输出数组结果值:ain,ain,ain

    判断是否微信浏览器:

    function is_weixn(){  
        var ua = navigator.userAgent.toLowerCase();  
        if(ua.match(/MicroMessenger/i)=="micromessenger") {  
            return true;  
        } else {  
            return false;  
        }  
    }

    4、split() 方法:把一个字符串分割成字符串数组。

    提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

    注意: split() 方法不改变原始字符串。

    把一个字符串分割成字符串数组:

    var str="How are you doing today?";
    var n=str.split(" ");

    n 输出一个数组的值:How,are,you,doing,today?

    五、使用 RegExp 对象

    在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。

    RegExp 对象属性

    • constructor返回一个函数,该函数是一个创建 RegExp 对象的原型。
    • global判断是否设置了 "g" 修饰符
    • ignoreCase判断是否设置了 "i" 修饰符
    • lastIndex用于规定下次匹配的起始位置
    • multiline判断是否设置了 "m" 修饰符
    • source返回正则表达式的匹配模式

    1、test():检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

    当一个具有g标志的正则表达式调用test()方法时,它的行为和exec()相同,既它从lastIndex处开始检索特定的字符串,如果它发现匹配,就将lastIndex设置为紧接在那个匹配之后的字符的位置,这样我们就可以使用方法test()来遍历字符串了。

    以下实例用于搜索字符串中的字符 "e":

    var patt = /e/;
    patt.test("The best things in life are free!");

    字符串中含有 "e",所以该实例输出为:true

    你可以不用设置正则表达式的变量,以上两行代码可以合并为一行:

    /e/.test("The best things in life are free!")

    Javascript 判断是移动端浏览器还是 PC 端浏览器:

    if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
        document.write("移动")
    } else {
        document.write("PC")
    }

    2、exec():检索字符串中的正则表达式的匹配。

    RegExp的exec()方法和String的match()方法很类似。

    该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。返回的数组是Array实例,但还包含额外两个属性:index和input。

    • index:表示匹配项在字符串中的起始位置。
    • input:表示应用正则表达式的字符串。

    以下实例用于搜索字符串中的字母 "e":

    /e/.exec("The best things in life are free!");

    字符串中含有 "e",所以该实例输出为:e

    这里分两种情况,一种是global匹配,一种是非global匹配。

    global模式执行exec()匹配成功一次以后,再次执行exec()时,会从前一次匹配的最后一位开始继续向后匹配。例:

    var exp = /.at/g
    var matches = exp.exec('cat, bat, sat, fat'); //第一次匹配
    matches.index => 0
    matches.input => 'cat, bat, sat, fat'
    matches => ['cat']
    exp.lastIndex => 3
    matches = exp.exec('cat, bat, sat, fat'); //第二次匹配
    matches.index => 5
    matches.input => 'cat, bat, sat, fat'
    matches => ['bat']
    exp.lastIndex => 8

    非global模式执行exec()匹配成功一次以后,再次执行exec()时,会从头开始重新匹配。

    var exp = /.at/
    var matches = exp.exec('cat, bat, sat, fat'); //第一次匹配
    matches.index => 0
    matches.input => 'cat, bat, sat, fat'
    matches => ['cat']
    exp.lastIndex => 0
    matches = exp.exec('cat, bat, sat, fat'); //第二次匹配
    matches.index => 0
    matches.input => 'cat, bat, sat, fat'
    matches => ['cat']
    exp.lastIndex => 0

    返回的数组是Array实例:

    当使用(...)分组匹配时,一次exec()会匹配到多个结果

    var exp = /(there)s+(you)s+(are)/;
    var matches = exp.exec('hey, there you are my dear');
    matches = ["there you are", "there", "you", "are"];

    matches[0]:匹配整个表达式字符串。

    matches[1]:匹配第一个(...)内的字符串,之后以此类推。

    注意:含(?:...)非捕获分组的表达式执行exec后返回的数组中不包含(?:...)匹配的字符串。

  • 相关阅读:
    如何优化电量
    140816 记录
    git 提交远程
    HttpClient post json
    JAVA static 作用
    Android Configuration change属性
    Android横竖屏切换处理
    android 多语言版本开发
    JAVA线程池简介
    30个你 “ 不可能全部会做 ” 的javascript题目-答案解释
  • 原文地址:https://www.cnblogs.com/springsnow/p/12299078.html
Copyright © 2011-2022 走看看