圆满解析JS字符串和正则表明式中的match,正则相关措施总括

By admin in 4858美高梅 on 2019年3月29日

4858美高梅 1

 

正则表明式(regular
expression)描述了一种字符串匹配的格局,能够用来检查八个串是还是不是包括某种子串、将合作的子串做替换或许从有些串中取出符合某些条件的子串等。

正则的三种写法:

        1、 /正则/(表示法)
        2、 new RegExp(正则)

正则表明式的定义

三个RegExp对象的每1次估值都回到新对象,那意味RegExp是可变对象。

壹 、正则对象的措施

正则表明式由于不平日应用,所以简单平时忘记,下边小编把常用的函数和功能,简明扼要的陈列在此,以备日后翻看:

RegExp实例对象有三个个性

  • global:是不是全局搜索,暗许是false

  • ignoreCase:是还是不是大小写敏感,暗许是false

  • multiline:多行追寻,暗许值是false

  • lastIndex:是日前表明式格局第③回匹配内容中最后一个字符的下二个职务,每回正则表明式成功匹配时,lastIndex属性值都会跟着改变

  • source:正则表达式的文本字符串

        \d   表示匹配数字
        \s   匹配任何空白字符,包括空格、制表符、换页符等等。
        \w   匹配字母数字下划线

        \D   匹配非数字
        大写转义字符是小写的规则反过来,就是取非的意思。

直接量字符

模式 说明 备注
任意字符 除 ^ $ . * + ? = ! : | \ / () [] {} 以外的字符,代表自身  
\0(数字零) NUL 字符 \u0000
\t 制表符 \u0009
\n 换行符 \u000A
\v 垂直制表符 \u000B
\f 换页符 \u000C
\r 回车符 \u000D
\xnn 由十六进制数nn指定的ASCII字符 \x20表示空格
\unnnn 由十六进制数nnnn指定的Unicode字符 \u0020表示空格
\cX 控制字符^X \cC是CTRL-C

在正则表明式中,许多标点符号有例外意义,他们是:

^ $ . * + ? = ! : | \ / () [] {}

假若想在正则表明式中运用这么些字符的直接量进行匹配,则须求利用\转义前缀。不过在早晚的左右文中也足以归纳\转义前缀。

1、test()

语法:regObj.test(str)
对字符串执行搜索

再次来到值:布尔值。测试str中是不是留存匹配regObj方式的字符串,存在再次来到true,不设有重返false

专注:该措施在正则对象是还是不是带有全局属性(g)下的表现不相同

先介绍下正则对象的lastIndex属性,lastIndex
是正则表明式匹配内容时,起初匹配的地点。

先说结论:正则表明式是还是不是带有全局属性的界别便是,每一趟执行后会不会自行修改该正则对象的lastIndex属性值,带有g,就会活动修改,不带就不会修改

(1)不带全局属性g

4858美高梅 2

刚初阶都以从下标0处开首匹配,不带g时,无论执行多少次,该正则对像的lastIndex属性均不变

(2)带全局属性g

4858美高梅 3

该起来从下标为0处初步匹配,匹配后会自动修改该正则对象的lastIndex属性,且修改为近来表达式匹配内容的末梢3个字符的下叁个岗位。平昔到字符串结尾,重新设置lastIndex为0

RegExp对象的函数常用的有三个

亟待转义的字符

与其他语言中的正则表达式类似,模式中使用所有元字符必须转义。正则表达式中的元字符包括:
        ( [ { \ ^ $ | ? *  + .}

example

//匹配第一个'cat'或者'bat',不区分大小写
var reg01 = /[bc]at/i;
//匹配第一个'[bc]at',不区分大小写
var reg02 = /\[bc\]at/i;
//匹配以所有以'at'结尾的三字符的组合,不区分大小写;
var reg03 = /.at/gi;
//匹配所有'.at',不区分大小写
var reg04 = /\.at/gi;

字符类

模式 说明 备注
[ . . . ] 方括号内的任何一个字符 方括号内\/]需要转义,其他符号可以不转义
[^ . . . ] 不在方括号中的任何一个字符  
[a-z] 连字符表示字符范围 连字符位于方括号的开始或结尾表示连字符本身
. 除换行符(包括所有的unicode行终止符)之外的任何一个字符  
\w 一个单词字符 [a-zA-Z0-9]
\W 一个非单词字符 [^\w]
\s 任何一个unicode空白符  
\S 任何一个非unicode空白符的字符  
\d 任何一个数字字符 [0-9]
\D 任何一个非数字字符 [^0-9]
[\b] 退格直接量  

[\u4E00-\u9FA5\uF900-\uFA2D]可以匹配四个中夏族民共和国字

2、exec()

语法:regObj.exec(str)对字符串执行搜索

重临值:.如果没有匹配的文本则赶回null,否则再次回到1个结出数组:

回来的数组:第三个要素与正则表明式相匹配的文件;第一个成分是与RegExpObject的首先身长表明式相匹配的文本(如果局地话);第6个要素是与RegExpObject的第③个头表明式相匹配的文书(要是某些话),以此类推。

且该数组具有index属性:
申明匹配文本的首先个字符的职分

该数组有input属性:
存放被寻找的字符串string

(1)不带全局属性g

4858美高梅 4

正则对象的lastIndex属性始终不变

(2)带全局属性g

4858美高梅 5

会自动修改该正则对象的lastIndex属性

小结:对高满堂则对象的exec()和test()方法,正则表明式是不是含有全局属性的差别正是,每回执行后会不会活动修改该正则对象的lastIndex属性值。

1、test函数

量词

+ 表示1次或者多次
* 表示0次或者多次
? 表示0次或者一次
{num} 匹配num次
{num1,num2}最少匹配num1次,最多num2次;
{,num2} 最少0次最多num2次;

exmaple

var str = 'm132i232a332o432';
// var re = /\d/g;
// var re = /\d?/g;
// var re = /\d*/g;
// var re = /\d+/g;
// var re = /\d{2}/g;
// var re = /\d{0,}/g;
// var re = /\d{0,1}/g;
console.log(str.match(re));

数量词

贪婪 懒惰 说明 匹配次数(x)
{n,m} {n,m}? 匹配左侧元素至少n次,但不多于m次。 n <= x <= m
{n,} {n,}? 匹配左侧元素至少n次。 n <= x
{n}   匹配左侧元素恰好n次。 n == x
? ?? {0,1}  
+ +? {1,}  
* *? {0,}  

② 、使用到正则表达式的点子

用法:RegExpObject.test(string)

范围

用[]表示一个字符匹配的范围
^ 匹配字符的首位
$ 匹配字符串的末尾
| 或者

example

var str = 'm132I232a332o432';

//var re = /[0-9]+/g;
  var re = /[a-zA-Z]+/g;

console.log(str.match(re));

慎选、分组和引用

序列 说明 备注
| 选择,匹配的是竖线左边或右边的子表达式 注意需要先严后宽的顺序。(abcd|abc)
( . . . ) 组,将多个项组合为一个单元,并捕获匹配的字符串以备引用。  
(?: . . ) 非捕获组,将多个项项组合为一个单元,但是不捕获匹配的字符串。  
\n  后向引用,匹配第n分组匹配的字符串,n是开括号从左到右的序数。  

1、match()

语法:stringObj.match(regexp/searchValue)字符串内搜寻钦命的值,或找到三个或多少个正则表明式的同盟

在此,只看stringObj.match(regexp) 

返回值:数组 或者 null

  1. 万一 regexp 没有标明 g:那么 match()
    方法就只可以在 stringObject
    中执行三回匹配。假如没有找到其余匹配的文书, match() 将赶回
    null。不然,它将回到3个数组,当中存放了与它找到的匹配文本有关的音信。该数组的第
    0
    个成分存放的是格外文本,而任何的因素存放的是与正则表明式的子表明式匹配的文件。除了那么些健康的数组成分之外,重临的数组还包涵八个对象属性。index
    属性注明的是合营文本的开始字符在 stringObject 中的地点,input
    属性评释的是对 stringObject 的引用。
  2. 设若 regexp 具有标志 g:则 match()
    方法将执行全局检索,找到 stringObject
    中的全部匹配子字符串。若没有找到其余匹配的子串,则赶回
    null。借使找到了多个或四个匹配子串,则赶回三个数组。然则全局匹配重回的数组的情节与前者大分化,它的数组成分中存放的是
    stringObject 中持有的匹配子串,而且也一向不 index 属性或 input
    属性。

(1)不带全局属性g

4858美高梅 6

重返的是:第二次匹配的子串和持有匹配的捕获组组成的数组,且数组具有index属性和input属性

(2)带全局属性g

4858美高梅 7

回来的是:
全体匹配的子串组成的数组

只顾:在全局检索模式下,match()
即不提供与子表达式(捕获组)匹配的文本的音信,也不表明种种匹配子串的任务。

回到:就算字符串 string 中包涵与 RegExpObject 匹配的文件,则赶回
true,不然重临 false。

相关方法

点名匹配岗位

模式 说明 模式 输入字符串 匹配
^ 匹配字符串的起点,在m修饰符下匹配一行的起点 ^\d{3} "901-333-" "901-"
$ 匹配字符串的终点,在m修饰符下匹配一行的终点 -\d{3}$ "-901-333" "-333"
\b 匹配单词的边界 \Bend\w*\b "end sends endure lender" "ends","ender"
\B 匹配非单词边界的位置      
(?=expr) 肯定式断言,子表达式匹配右侧文本 \w+(?=\.) "He is. The dog ran. The sun is out." "is","ran","out"
(?!expr) 否定式断言,子表达式不匹配右侧文本 \b(?!un)\w+\b "unsure sure unity used" "sure","used"

 

2、replace()

语法:
str.replace(reg/substr,newStr/function) 用于在字符串中用一些字符替换另一部分字符,或沟通二个与正则表达式匹配的子串

再次来到值:替换了以往的新的字符串,原字符串不变

只看str.replace(reg,fun)

 每一种匹配项都调用该fun函数(若不是大局匹配,则势必只有3个匹配项),且该函数的首先个参数是同盟情势的字符串,接下去的参数是与方式中的子表明式匹配的字符串

该函数再次来到的字符串将用作替换文本使用

(1)不带全局属性g

4858美高梅 8

 

只有1个相当项“1a2” 且把该匹配项换到 $1,即首先个捕获组的始末

圆满解析JS字符串和正则表明式中的match,正则相关措施总括。(2)带全局属性g

4858美高梅 9

带全局属性,则会循环匹配,循环调用回调函数

讲述:这几个措施没有啥样新鲜之处,对修饰符g没有何出格处理

RegExp.prototype.test(str)

艺术用于测试字符串参数中是或不是存正则表达式格局,假使存在则赶回true,不然重回false

var reg = /\d+\.\d{1,2}$/g;

reg.test('123.45'); //true
reg.test('0.2'); //true

reg.test('a.34'); //false
reg.test('34.5678'); //false

修饰符

字符 含义
i 不区分大小写
g 全局匹配
m 多行模式,其中^和$匹配每行的开头和末尾

 3、split()

语法:strObj.split(str/reg,howmay)
用于把二个字符串分割成字符串数组。

howmay可选,内定重返的数组的最大尺寸。就算设置了该参数,重返的子串不会多于那一个参数指定的数组。若是没有安装该参数,整个字符串都会被分割,不考虑它的尺寸。

4858美高梅 ,有没有大局属性标志都以一模一样的

4858美高梅 10

 

示例:

RegExp.prototype.exec(str)

艺术用江小鱼则表明式形式在字符串中运作查找,借使exec()找到了合作的公文,则赶回四个结果数组,不然再次回到null

除外数组成分和length属性之外,exec()措施重临对象还包涵八个特性。

1.index 属性注解的是匹配文本的率先个字符的地点
2.input 属性则存放的是被寻找的字符串string

非全局调用

调用非全局的RegExp对象的exec()时,重回数组的第②个因素是与正则表明式相匹配的文件,第3个要素是与
RegExpObject的率先身材表明式相匹配的文本(倘使有的话),第11个因素是与RegExp对象的第①个头表明式相匹配的文件(假使某个话),以此类推。

大局调用

调用全局的RegExp对象的exec()时,它会在RegExp实例的lastIndex属性钦定的字符处伊始摸索字符串string

1.当exec()找到了与表明式相匹配的公文时,在卓殊后,它将把RegExp实例的lastIndex属性设置为匹配文本的末梢3个字符的下3个岗位。能够透过反复调用exec()方法来遍历字符串中的全部匹配文本

2.当 exec()
再也找不到相当的文书时,它将回来null,并把lastIndex属性重置为0

var reg = /\d/g;

var r = reg.exec('a1b2c3');
console.log(reg.lastIndex); //2

4858美高梅 11

4858美高梅 12

除去上边的多个主意,有个别字符串函数可以流传RegExp对象作为参数,实行部分繁杂的操作

正则表明式相关的String方法

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /a=1/;
console.log(reg.test(url)); // 输出结果为 true 

String.prototype.search(reg)

number  string.search(string|regexp);

从string中寻觅参数所填的内容,假设找到就赶回在string中的地点,不然再次来到-1。search方法和indexOf一样,唯一的不相同,indexOf不援助正则。

search()
方法不实施全局匹配,它将忽略标志g,它同时忽略正则表达式对象的lastIndex属性,并且总是从字符串的起来实行查找,那意味它总是回到字符串的第3个11分的职位

'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1

search()

2、exec函数

String.prototype.match(reg)

match()方法将追寻字符串,以找到一个或三个与regexp匹配的公文。但regexp是还是不是富有标志
g对结果影响一点都不小。

非全局调用

借使regexp没有标志g,那么match()方法就只能在字符串中实践壹回匹配。假诺没有找到任何匹配的文本,match()
将回到null。不然它将再次回到三个数组,个中存放了与它找到的优良文本有关的音讯。

该数组的第①个因素存放的是匹配文本,而其他的要素存放的是与正则表明式的子表明式匹配的文本。除了这几个健康的数组元素之外,重回的数组还包涵三个对象属性

1.index 属性表明的是杰出文本的开端字符在字符串中的地方

2.input 属性证明的是对 stringObject 的引用

看个例子

var r = 'aaa123456'.match(/\d/);

4858美高梅 13

大局调用
倘诺regexp具有标志g则match()方法将执行全局检索,找到字符串中的全体匹配子字符串

若没有找到其余匹配的子串,则赶回
null。尽管找到了一个或多少个匹配子串,则赶回2个数组

可是全局匹配再次来到的数组的内容与前者大分化,它的数组成分中存放的是字符串中拥有的匹配子串,而且也并未index属性或input属性。

var r = 'aaa123456'.match(/\d/g);

4858美高梅 14

概念和用法

search()
方法用于检索字符串中指定的子字符串,或探寻与正则表明式相匹配的子字符串。

用法:RegExpObject.exec(string)

String.prototype.replace()

replace用法1 – 基础用法
最宗旨的易错点:若是要替换全体匹配项,必要传入二个 RegExp 对象并点名其
global 属性。

//基本用法:
    var myString = "javascript is a good script language";
    //在此我想将字母a替换成字母A
    console.log(myString.replace("a","A"));
    //    我想大家运行后可以看到结果,它只替换了找到的第一个字符,如果想替换多个字符怎么办?
    //    答案:结合正则表达式,这也是replace的核心用法之一!

    //将字母a替换成字母A 错误的写法  少了/g
    myString = "javascript is a good script language";
    console.log(myString.replace(/a/,"A"));
    //console.log(myString.replace(new RegExp('a','gm'),"A"));

    //将字母a替换成字母A  正确的写法 /g表示匹配所有
    myString = "javascript is a good script language";
    console.log(myString.replace(/a/g,"A"));

replace用法2 – 高级用法 特殊标记$
对此正则replace约定了3个与众差异标记符$:

    1.$i (i:1-99) : 表示从左到右正则子表达式所匹配的文本。
    2.$&:表示与正则表达式匹配的全文本。
    3.$`(`:切换技能键):表示匹配字符串的左边文本。
    4.$'(‘:单引号):表示匹配字符串的右边文本。
    5.$$:表示$转移。

    //案例1- 匹配后替换
    console.log('replace功能1 - 匹配后替换')
    //在本例中,我们将把所有的花引号替换为直引号:
    myString = '"a", "b"';
    myString = myString.replace(/"([^"]*)"/g, "'$1'");
    //寻找所有的"abb"形式字符串,此时组合表示字符串,,然后用'$1'替换
    console.log(myString)

    //案例2- 匹配后替换
    myString= "javascript is a good script language";
    console.log(myString.replace(/(javascript)\s*(is)/g,"$1 $2 fun. it $2"));

    //案例3 - 分组匹配后颠倒
    console.log('replace功能2 - 颠倒')
    //在本例中,我们将把 "itcast,cn" 转换为 "cn itcast" 的形式:
    myString = "itcast , cn";
    myString = myString.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
    console.log(myString)

    //案例4 - 分组匹配后颠倒
    myString = "boy & girl";
    myString =  myString.replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1") //girl & boy
    console.log(myString)

   //案例5 - $&:表示与正则表达式匹配的全文本。
   myString = "boy";
   myString = myString.replace(/\w+/g,"$&-$&") // boy-boy
   console.log(myString)

    // 案例6 - $`(`:切换技能键):表示匹配字符串的左边文本。
    myString = "javascript";
    myString = myString.replace(/script/,"$& != $`") //javascript != java
    console.log(myString)

    //案例7 - $'(‘:单引号):表示匹配字符串的右边文本。
    myString = "javascript";
    myString = myString.replace(/java/,"$&$' is ") // javascript is script
    console.log(myString)

**replace用法3 – 高级用法 第四个参数能够是函数 **

   //无敌的函数 - replace第二个参数可以传递函数
   //如果第二参数是一个函数的话,那么函数的参数是什么呢?
    console.log('replace - replace第二个参数可以传递函数')
    myString = "bbabc";
    myString.replace(/(a)(b)/g, function(){
        console.log(arguments) // ["ab", "a", "b", 2, "bbabc"]
    });
    //    参数将依次为:
    //    1、整个正则表达式匹配的字符。
    //    2、第一分组匹配的内容、第二分组匹配的内容…… 以此类推直到最后一个分组。
    //    3、此次匹配在源自符串中的下标(位置)。
    //    4、源自符串
    //    所以例子的输出是 ["ab", "a", "b", 2, "bbabc"]

    //用法举例 1. 首字母大写 -- 一个参数 表示匹配的整个字符串
    console.log('replace功能 - 将首字符转为大写')

    //在本例中,我们将把字符串中所有单词的首字母都转换为大写:
    var myString = 'aaa bbb ccc';
    myString=myString.replace(/\b\w+\b/g, function(word){
                return word.substring(0,1).toUpperCase()+word.substring(1);}
    );
    console.log(myString)

语法

stringObject.search(regexp)
参数 描述
regexp 是需要检索的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

回到:重返二个数组,个中存放匹配的结果。假若未找到匹配,则重临值为
null。

返回值

stringObject 中首先个与 regexp
相匹配的子串的发端地方。借使没有找到任何匹配的子串,则赶回 -1。

描述:

说明

search() 方法不履行全局匹配,它将忽略标志 g。它同时忽略 regexp 的
lastIndex 属性,并且一连从字符串的开首开始展览搜寻,那表示它总是回到
stringObject 的首先个十分的职责。

exec() 方法的职能相当强大,它是1个通用的艺术,而且动用起来也比 test()
方法以及支持正则表明式的 String 对象的方法尤其复杂。

replace()

只要 exec() 找到了合营的公文,则赶回八个结果数组。不然,再次回到null。此数组的第 0 个成分是与正则表明式相匹配的文书,第 1 个因素是与
RegExpObject 的第 1 个子表明式相匹配的公文(若是部分话),第 3个成分是与 RegExpObject 的第 2
身材表明式相匹配的文本(假诺有的话),以此类推。除了数组成分和 length
属性之外,exec() 方法还重临五个属性。index
属性注脚的是同盟文本的第③个字符的岗位。input
属性则存放的是被搜寻的字符串 string。我们能够看得出,在调用非全局的
RegExp 对象的 exec() 方法时,再次回到的数组与调用方法 String.match()
重回的数组是平等的。

概念和用法

replace()
方法用于在字符串中用一些字符替换另一对字符,或交流二个与正则表明式匹配的子串。

不过,当 RegExpObject 是1个大局正则表明式时,exec()
的行事就多少复杂一些。它会在 RegExpObject 的 lastIndex
属性钦点的字符处开始寻找字符串 string。当 exec()
找到了与表达式相匹配的文书时,在协作后,它将把 RegExpObject 的 lastIndex
属性设置为匹配文本的尾声二个字符的下三个职位。那正是说,您能够经过反复调用
exec() 方法来遍历字符串中的全数匹配文本。当 exec()
再也找不到极度的文件时,它将再次回到 null,并把 lastIndex 属性重置为 0。

语法

stringObject.replace(regexp/substr,replacement)
参数 描述
regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

示例:

返回值

三个新的字符串,是用 replacement 替换了 regexp
的首先次匹配或持有匹配之后获得的。

正则表明式带修饰符g

说明

字符串 stringObject 的 replace() 方法执行的是寻觅并替换的操作。它将在
stringObject 中搜寻与 regexp 相匹配的子字符串,然后用 replacement
来替换这么些子串。尽管 regexp 具有全局标志 g,那么 replace()
方法将替换全体匹配的子串。不然,它只替换第3个匹配子串。

replacement
能够是字符串,也能够是函数。要是它是字符串,那么种种匹配都将由字符串替换。可是replacement 中的 $
字符具有一定的意义。如下表所示,它申明从方式匹配获得的字符串将用以替换。

字符 替换文本
$1、$2、…、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&/$0 与 regexp 相匹配的子串。
$` (左撇) 位于匹配子串左侧的文本。
$’ (右撇) 位于匹配子串右侧的文本。
$$ 直接量符号。

参数 replacement
可以是函数而不是字符串。在那种状态下,每一种匹配都调用该函数,它回到的字符串将用作替换文本使用。该函数的率先个参数是协作情势的字符串。接下来的参数是与方式中的捕获组匹配的字符串,可以有
0 个或多个这么的参数。接下来的参数是二个平头,申明了分外在 stringObject
中出现的职位。最后一个参数是 stringObject 本身。

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //["b=2", "b", "2", index: 25, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //["c=3", "c", "3", index: 29, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //null
reg.lastIndex = 0; //这段代码很重要哦,注意理解
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: http://www.baidu.com?a=1&b=2&c=3]

match()

正则表明式不带修饰符g

概念和用法

match() 方法可在字符串内搜寻内定的值,或找到三个或多个正则表达式的合营。

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
reg.lastIndex = 0; 
console.log(reg.exec(url)); //["a=1", "a", "1", index: 21, input: http://www.baidu.com?a=1&b=2&c=3]

语法

stringObject.match(regexp)
参数 描述
regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

意识分歧的地点了吗,把函数描述优异读一回,就清楚了^_^

返回值

存放匹配结果的数组。该数组的剧情注重于 regexp 是不是具备全局标志 g。

String对象的函数协理正则的有四个,大家只说里面包车型地铁一个

说明

match() 方法将追寻字符串 stringObject,以找到叁个或两个与 regexp
匹配的文书。那一个措施的作为在非常大程度上取决于 regexp 是或不是享有标志 g。

假设 regexp 没有标明 g,那么 match() 方法就只可以在 stringObject
中实施3次匹配。倘若没有找到任何匹配的文本, match() 将回到
null。不然,它将再次来到三个数组,个中存放了与它找到的特出文本有关的音讯。该数组的第
0
个要素存放的是同盟文本,而别的的成分存放的是与圆括号分组匹配的文书。除了那一个健康的数组成分之外,再次来到的数组还有五个属性。index
属性指明匹配文本在 stringObject 中的地点,input 属性是对 stringObject
本人的引用。

比方 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject
中的全部匹配子字符串。若没有找到任何匹配的子串,则赶回
null。倘若找到了三个或八个匹配子串,则赶回二个数组。然而它的数组成分中存放的是
stringObject 中拥有的匹配子串,而且也绝非 index 属性或 input
属性。注目的在于全局检索方式下,match()
即不提供与子说明式匹配的文书的消息,也不注脚每种匹配子串的职分。假若您供给这个全局检索的音讯,能够行使
RegExp.exec()。

1、match函数

string.split(delimiter, limit)

用法:stringObject.match(searchvalue | regexp),那里大家只说regexp格局

概念和用法

split() 方法用于把多少个字符串分割成字符串数组。

再次回到值:存放匹配结果的数组。该数组的始末注重于 regexp 是不是富有全局标志
g。

语法

stringObject.split(separator,howmany)
参数 描述
separator 字符串或正则表达式,从该参数指定的地方分割 stringObject。
howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

描述:

返回值

二个字符串数组。该数组是通过在 separator 钦点的边界处将字符串
stringObject 分割成子串制造的。

match() 方法将追寻字符串 stringObject,以找到二个或八个与 regexp
匹配的文本。那些点子的作为在非常的大程度上取决于 regexp 是不是富有标志 g。

说明

借使没有点名separator,则stringObject不会被分割,重临的数组仅包罗多个stringObject字符串。

如果separator为空字符串或然是匹配空字符串的正则表明式,那么
stringObject 中的各个字符之间都会被断开。

要是separator匹配stringObject字符串的起头,则赶回数组的率先个要素为空字符串。同样,假如separator匹配stringObject字符串的终极,则赶回数组的末段1个因素为空字符串。

一旦separator为形如/()/被圆括号括起来的正则表明式,分隔符匹配的文书将在数组中回到。不然,重回数组将不包涵分割符文本。

注明:String.split() 执行的操作与 Array.join 执行的操作是相反的。

比方 regexp 没有标明 g,那么 match() 方法就只可以在 stringObject
中执行叁遍匹配。假设没有找到别的匹配的文件, match() 将再次回到null。不然,它将回来3个数组,在那之中存放了与它找到的合作文本有关的音信。该数组的第
0
个元素存放的是匹配文本,而其他的要素存放的是与正则表明式的子表达式匹配的公文。除了那个健康的数组成分之外,重回的数组还包括五个目的属性。
index 属性证明的是极度文本的前奏字符在 stringObject 中的地方,input
属性证明的是对 stringObject 的引用。

RegExp对象

假使 regexp 具有标志 g,则 match() 方法将履行全局检索,找到 stringObject
中的全体匹配子字符串。若没有找到其余匹配的子串,则赶回
null。若是找到了2个或四个匹配子串,则赶回二个数组。可是全局匹配再次来到的数组的剧情与前者大分裂,它的数组成分中存放的是
stringObject 中兼有的匹配子串,而且也从不 index 属性或 input 属性。

source

示例:

概念和用法

source
只读属性用于再次来到形式文本。该公文不包括正则表达式直接量的斜杠定界符,也不包罗标志
i、m、g。

不带修饰符g

语法

RegExpObject.source
var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/;
var result = url.match(reg);
console.log(result); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"]
console.log(result.index); //21
console.log(result.input); //http://www.baidu.com?a=1&b=2&c=3

global

带修饰符g

概念和用法

global 属性表示是或不是设置 g 标志。

它表明了给定的正则表明式是不是履行全局匹配。

要是设置了 g 标志,则该属性为 true,不然为 false。

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
var result = url.match(reg);
console.log(result); //["a=1", "b=2", "c=3"]
console.log(result.index); //undefined
console.log(result.input); //undefined 

语法

RegExpObject.global

 

发觉不同的地点了吧,把函数描述卓越读2回,就精晓了^_^

ignoreCase

2、replace函数

概念和用法

ignoreCase 属性表示是或不是设置 i 标志。

若果设置了 “i” 标志,则赶回 true,不然重临 false。

用法:stringObject.replace(regexp/substr,replacement)

语法

RegExpObject.ignoreCase

重回值:二个新的字符串,是用 replacement 替换了 regexp
的第二遍匹配或有所匹配之后获得的。

multiline

讲述:字符串 stringObject 的 replace()
方法执行的是寻找并替换的操作。它将在 stringObject 中找找与 regexp
相匹配的子字符串,然后用 replacement 来替换那一个子串。借使 regexp
具有全局标志 g,那么 replace()
方法将替换全体匹配的子串。不然,它只替换第③个匹配子串。

概念和用法

multiline 属性表示是还是不是设置 m 标志。

它注脚了给定的正则表达式是否以多行形式实施方式匹配。在那种形式中,假如要寻找的字符串中蕴藏换行符,^
和 $ 锚除了匹配字符串的上三宝太监最后外还格外每行的启幕和最后。

例如,模式 /W3School$/im 匹配 “w3school” 和 “W3School\nisgreat”。(\n
是换行符\u000A)。

假如 m 标志被安装,则该属性为 true,不然为 false。

replacement
能够是字符串,也可以是函数。假如它是字符串,那么每一种匹配都将由字符串替换。不过replacement 中的 $
字符具有特定的意义。如下表所示,它表达从情势匹配获得的字符串将用以替换。

语法

RegExpObject.multiline
字符 替换文本
$1、$2、…、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$’ 位于匹配子串右侧的文本。
$$ 直接量符号。(意思就是要替换为 $ 符号的时候,就写两个$)

lastIndex

示例:

概念和用法

lastIndex 属性是下次合作的起始地点。

不带修饰符g

语法

RegExpObject.lastIndex
var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/;
var url1 = url.replace(reg,function(a,b,c,d,e){
console.log(a,b,c,d,e); //a=1, a, 1, 21, http://www.baidu.com?a=1&b=2&c=3
return 'ok';
})
console.log(url1); //http://www.baidu.com?ok&b=2&c=3

说明

对此带”g”修饰符的正则表明式,该属性存放3个字符地点,它紧跟
RegExp.exec() 和 RegExp.test() 方法上次同盟的职责。这几个方法运用
lastIndex
属性所指的职位作为下次摸索的开首点。通过反复调用那八个主意就能够遍历3个字符串中的全部匹配文本。注意不包涵标志”g”
和不意味全局形式的 RegExp 对象不能使用 lastIndex 属性。

lastIndex是可读可写的性质。能够随时设置它,以内定指标字符串中下1次搜索的伊始地方。当方法
exec() 或 test() 再也找不到能够包容的文本时,它们会自动把 lastIndex
属性重置为
0。在功成名就地合营了某些字符串之后,假设开端物色新字符串,必须出示把这几个性格设置为
0。

带修饰符g

exec()

var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/g;
var url1 = url.replace(reg,function(a,b,c,d,e){
console.log(a,b,c,d,e); //执行3次,分别输出为:a=1, a, 1, 21, http://www.baidu.com?a=1&b=2&c=3 和 b=2, b, 2, 25, http://www.baidu.com?a=1&b=2&c=3 和 | c=3, c, 3, 29, http://www.baidu.com?a=1&b=2&c=3
return 'ok';
})
console.log(url1); //http://www.baidu.com?ok&ok&ok

概念和用法

exec() 方法用于检索字符串中的正则表明式的合作。

第一个参数为字符串时

语法

RegExpObject.exec(string)
参数 描述
string 必需。要检索的字符串。
var url = 'http://www.baidu.com?a=1&b=2&c=3';
var reg = /([^?&=]+)=([^?&=])*/; //不带修饰符g
var url1 = url.replace(reg,"$&")
console.log(url1); //http://www.baidu.com?a=1&b=2&c=3
var url1 = url.replace(reg,"$1")
console.log(url1); //http://www.baidu.com?a&b=2&c=3
var url1 = url.replace(reg,"$2")
console.log(url1); //http://www.baidu.com?1&b=2&c=3
var url1 = url.replace(reg,"$'")
console.log(url1); //http://www.baidu.com?&b=2&c=3&b=2&c=3
var reg = /([^?&=]+)=([^?&=])*/g; //带修饰符g
var url1 = url.replace(reg,"$&")
console.log(url1); //http://www.baidu.com?a=1&b=2&c=3
var url1 = url.replace(reg,"$1")
console.log(url1); //http://www.baidu.com?a&b&c
var url1 = url.replace(reg,"$2")
console.log(url1); //http://www.baidu.com?1&2&3
var url1 = url.replace(reg,"$'")
console.log(url1); //http://www.baidu.com?&b=2&c=3&&c=3&

返回值

回去贰个数组,在那之中存放匹配的结果。假诺未找到匹配,则赶回 null。

以上所述是我给我们介绍的一揽子解析JS字符串和正则表明式中的match、replace、exec等函数,希望对大家全体协助,倘诺大家有任何疑问请给自个儿留言,小编会及时苏醒我们的。在此也相当多谢我们对台本之家网站的帮衬!

说明

抱有RegExp和String情势匹配方法中,exec()
方法是最精锐的,它是贰个通用的艺术,比较 RegExp.test(), String.search(),
String.replace(), 和 String.match() 方法,某种程度上,使用它进一步复杂。

exec()搜索string中匹配RegExpObject的文件。假诺 exec()
发现三个合营,则赶回八个结实数组。不然,重回 null。结果数组的第 0
个成分是匹配文本,第 1 个因素是与 RegExpObject 的第 1个括号子表达式相匹配的文本(假诺有的话),第 2 个因素是与 RegExpObject
的第 三个头表明式相匹配的文件,以此类推。这一个数组的length属性表示数组的因素个数。除了数组元素和
length 属性之外,exec() 方法重返的值还有八个天性。index
属性表明的是匹配文本的启幕地方。input 属性则是 string。当 RegExpObject
是非全局的 RegExp 对象时,那几个重回数组与方法 String.match()
再次回到的数组是同样的。

当 RegExpObject 是一个大局正则表明式时,exec()
的一坐一起就有个别复杂一些。它会在 RegExpObject 的 lastIndex
属性钦定的字符处伊始物色字符串 string。当它发现3个男才女貌,它设置
lastIndex 属性为匹配文本后首先个字符的职位。这便是说,可以频繁调用
exec() 方法来遍历字符串中的全数匹配文本。当 exec()
再也找不到12分的公文时,它将重临 null,并把 lastIndex 属性重置为
0。在成功地协作了字符串之后,要是起先探寻新字符串,必须密切手动重置
lastIndex 属性为 0。

注意,无论 RegExpObject 是不是是全局情势,exec()
总是在回来数组中包罗每一趟匹配的总体细节。那是 exec() 与 String.match()
的区别之处,在全局格局下后者再次回到的新闻少得多。要想赢得全局格局的完好方式匹配信息,唯一的情势是在二个循环往复中屡屡调用
exec() 方法。

你或然感兴趣的作品:

  • JS正则截取多个字符串之间及字符串前后内容的不二法门
  • JS使用正则截取七个字符串之间的字符串落成方式详解
  • javascript将字符串中的多个空格替换为3个空格的正则实例
  • JavaScript利用正则表明式替换字符串中的内容
  • JS判断输入的字符串是还是不是是数字的方式(正则表明式)
  • JS不用正则验证输入的字符串是或不是为空(包涵空格)的贯彻代码
  • String字符串匹配javascript
    正则表明式
  • javascript使用正则完毕去掉字符串前边的全部0

test()

概念和用法

test()方法用于检查和测试3个字符串是不是匹配某些格局。

语法

RegExpObject.test(string)
参数 描述
string 必需。要检测的字符串。

返回值

一旦字符串 string 中涵盖与 RegExpObject 匹配的文件,则赶回
true,不然重临 false。

说明

设r为RegExp对象,s为目的字符串,则(r.test(s))与表示式(r.exec(s) !=
null)是等价的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有