贯虱穿杨解析JS字符串和正则表明式中的match,正则相关办法计算

亚洲必赢官网 1

 

正则表达式(regular
expression)描述了1种字符串相配的情势,能够用来检查一个串是还是不是包括某种子串、将相称的子串做替换或许从某些串中抽出符合有些条件的子串等。

正则的二种写法:

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

正则表明式的概念

1个RegExp对象的每三回估值都回来新对象,那表示RegExp是可变对象。

一、正则对象的点子

正则表明式由于不常常使用,所以轻松平常忘记,上面我把常用的函数和机能,简明扼要的陈列在此,以备日后翻看:

RegExp实例对象有七个属性

  • global:是不是全局搜索,暗中同意是false

  • ignoreCase:是或不是大小写敏感,暗中同意是false

  • multiline:多行追寻,私下认可值是false

  • lastIndex:是当前表达式情势第三遍相配内容中最后2个字符的下2个地点,每便正则表达式成功匹配时,lastIndex属性值都会跟着转移

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

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

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

贯虱穿杨解析JS字符串和正则表明式中的match,正则相关办法计算。直接量字符

模式 说明 备注
任意字符 除 ^ $ . * + ? = ! : | \ / () [] {} 以外的字符,代表自身  
\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,就能活动修改,不带就不会修改

(一)不带全局属性g

亚洲必赢官网 2

刚开头都以从下标0处发轫相配,不带g时,无论施行稍微次,该正则对像的lastIndex属性均不改变

(二)带全局属性g

亚洲必赢官网 3

该起来从下标为0处伊始相称,相称后会自动修改该正则对象的lastIndex属性,且修改为当前表明式相配内容的结尾三个字符的下几个职责。一贯到字符串结尾,重新安装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]能够相称3个中华夏族民共和国字

2、exec()

语法:regObj.exec(str)对字符串施行寻找

再次回到值:.如若未有相配的文件则赶回null,不然再次来到二个结实数组:

归来的数组:第二个成分与正则表明式相相称的文本;第一个因素是与RegExpObject的首先身长表明式相相称的公文(借使局地话);第多个成分是与RegExpObject的第叁个头表明式相相称的文书(假诺某个话),由此及彼。

且该数组具备index属性:
注解相称文本的率先个字符的岗位

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

(1)不带全局属性g

亚洲必赢官网 4

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

(二)带全局属性g

亚洲必赢官网 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)字符串内搜寻钦点的值,或找到2个或三个正则表达式的匹配

在此,只看stringObj.match(regexp) 

返回值:数组 或者 null

  1. 若果 regexp 未有标明 g:那么 match()
    方法就不得不在 stringObject
    中施行3回相称。即便没有找到别的相配的文书, match() 将回来
    null。不然,它将赶回贰个数组,当中存放了与它找到的相配文本有关的新闻。该数组的第
    0
    个要素存放的是合营文本,而其他的成分存放的是与正则表明式的子表明式相称的文本。除了那个健康的数组成分之外,再次来到的数组还富含多个目的属性。index
    属性证明的是格外文本的开首字符在 stringObject 中的地方,input
    属性注解的是对 stringObject 的引用。
  2. 如果 regexp 具备标识 g:则 match()
    方法将试行全局检索,找到 stringObject
    中的全体相称子字符串。若未有找到其它相称的子串,则赶回
    null。如若找到了贰个或多少个相配子串,则赶回2个数组。然则全局相配重临的数组的剧情与前者大分裂样,它的数组成分中存放的是
    stringObject 中保有的相称子串,而且也不曾 index 属性或 input
    属性。

(一)不带全局属性g

亚洲必赢官网 6

回到的是:第一次相配的子串和富有相配的捕获组组成的数组,且数组具备index属性和input属性

(二)带全局属性g

亚洲必赢官网 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函数(若不是全局相称,则势必唯有二个相称项),且该函数的首先个参数是相称格局的字符串,接下去的参数是与格局中的子表明式相配的字符串

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

(1)不带全局属性g

亚洲必赢官网 8

 

唯有2个相称项“一a二” 且把该相称项换到 $一,即首先个捕获组的始末

(二)带全局属性g

亚洲必赢官网 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可选,钦赐重返的数组的最大尺寸。若是设置了该参数,再次回到的子串不会多于这几个参数钦定的数组。假诺未有设置该参数,整个字符串都会被划分,不记挂它的长度。

有未有大局属性标记都以如出1辙的

亚洲必赢官网 10

 

示例:

RegExp.prototype.exec(str)

方法用邹静之则表明式情势在字符串中运作查找,假使exec()找到了相当的公文,则赶回三个结实数组,不然重临null

除去数组成分和length属性之外,exec()主意重返对象还包含八个属性。

一.index 属性注明的是卓殊文本的首先个字符的职位
二.input 属性则存放的是被寻觅的字符串string

非全局调用

调用非全局的RegExp对象的exec()时,再次回到数组的首先个因素是与正则表明式相相配的文本,第一个要素是与
RegExpObject的第叁个子表明式相相称的公文(即使部分话),第5个因素是与RegExp对象的第一身形表明式相相配的文书(若是有的话),依此类推。

大局调用

调用全局的RegExp对象的exec()时,它会在RegExp实例的lastIndex属性钦命的字符处初叶物色字符串string

一.当exec()找到了与表明式相相称的文书时,在合营后,它将把RegExp实例的lastIndex属性设置为相称文本的尾声3个字符的下一个义务。能够通过反复调用exec()方法来遍历字符串中的全部相配文本

二.当 exec()
再也找不到分外的文书时,它将回来null,并把lastIndex属性重新载入参数为0

var reg = /\d/g;

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

亚洲必赢官网 11

亚洲必赢官网 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中的地方,不然重回-一。search方法和indexOf同样,唯1的分别,indexOf不援助正则。

search()
方法不实行全局匹配,它将忽略标记g,它同时忽略正则表明式对象的lastIndex属性,并且总是从字符串的启幕张开搜寻,那代表它连接回到字符串的首先个分外的任务

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

search()

2、exec函数

String.prototype.match(reg)

match()方法将寻找字符串,以找到3个或四个与regexp相称的公文。但regexp是或不是具备标记g对结果影响比不小。

非全局调用

只要regexp未有标识g,那么match()方法就只幸亏字符串中施行三遍相配。如若未有找到其余相配的文书,match()
将回来null。不然它将赶回1个数组,当中存放了与它找到的十一分文本有关的新闻。

该数组的率先个要素存放的是同盟文本,而其他的成分存放的是与正则说明式的子表达式相称的文本。除了这一个健康的数组成分之外,重返的数组还含有四个目标属性

一.index 属性评释的是协作文本的初阶字符在字符串中的位置

贰.input 属性申明的是对 stringObject 的引用

看个例证

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

亚洲必赢官网 13

全局调用
若是regexp具备标识g则match()方法将举行全局检索,找到字符串中的全部匹配子字符串

若未有找到任何相配的子串,则赶回
null。若是找到了二个或多个相配子串,则赶回3个数组

然则全局相配再次来到的数组的始末与前者大分裂,它的数组成分中存放的是字符串中享有的相配子串,而且也并未有index属性或input属性。

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

亚洲必赢官网 14

概念和用法

search()
方法用于检索字符串中钦定的子字符串,或搜求与正则表明式相相配的子字符串。

用法:RegExpObject.exec(string)

String.prototype.replace()

replace用法1 – 基础用法
最基本的易错点:若是要替换全部相称项,要求传入3个 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用法三 – 高等用法 第二个参数能够是函数 **

   //无敌的函数 - 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
相相称的子串的起初地方。假如未有找到其余相配的子串,则赶回 -一。

描述:

说明

search() 方法不进行全局相配,它将忽略标识 g。它同时忽略 regexp 的
lastIndex 属性,并且连接从字符串的发端开始展览检索,那代表它总是回到
stringObject 的第三个非凡的职位。

exec() 方法的服从至极强劲,它是八个通用的措施,而且动用起来也比 test()
方法以及协理正则表明式的 String 对象的不贰诀要特别复杂。

replace()

假设 exec() 找到了同盟的文件,则赶回八个结实数组。不然,返回null。此数组的第 0 个成分是与正则表达式相匹配的公文,第 一 个因素是与
RegExpObject 的第 一 个头表达式相相配的文件(借使部分话),第 一个元素是与 RegExpObject 的第 2身形表达式相相配的文本(就算有的话),由此及彼。除了数组成分和 length
属性之外,exec() 方法还回到两天个性。index
属性证明的是相当文本的首先个字符的地点。input
属性则存放的是被搜寻的字符串 string。大家能够看得出,在调用非全局的
RegExp 对象的 exec() 方法时,重返的数组与调用方法 String.match()
重返的数组是一样的。

概念和用法

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

不过,当 RegExpObject 是三个大局正则表明式时,exec()
的一言一动就不怎么复杂一些。它会在 RegExpObject 的 lastIndex
属性内定的字符处开首搜求字符串 string。当 exec()
找到了与表达式相相称的公文时,在合作后,它将把 RegExpObject 的 lastIndex
属性设置为相配文本的最后一个字符的下3个地点。那正是说,您能够透过反复调用
exec() 方法来遍历字符串中的全数相称文本。当 exec()
再也找不到万分的文件时,它将回来 null,并把 lastIndex 属性重新恢复设置为 0。

语法

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

示例:

返回值

1个新的字符串,是用 replacement 替换了 regexp
的率先次相配或富有相称之后收获的。

正则表达式带修饰符g

说明

字符串 stringObject 的 replace() 方法执行的是探索并替换的操作。它将要stringObject 中搜索与 regexp 相相配的子字符串,然后用 replacement
来替换这一个子串。假若 regexp 具有全局标记 g,那么 replace()
方法将替换全数相称的子串。不然,它只替换第三个匹配子串。

replacement
能够是字符串,也得以是函数。假若它是字符串,那么每种相配都将由字符串替换。不过replacement 中的 $
字符具备一定的意义。如下表所示,它注脚从方式相称获得的字符串将用以替换。

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

参数 replacement
能够是函数而不是字符串。在那种状态下,各类相配都调用该函数,它回到的字符串将用作替换文本使用。该函数的率先个参数是十分方式的字符串。接下来的参数是与情势中的捕获组相配的字符串,能够有
0 个或七个这么的参数。接下来的参数是1个整数,表明了非凡在 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对象的函数帮忙正则的有五个,我们只说内部的2个

说明

match() 方法将搜索字符串 stringObject,以找到一个或三个与 regexp
相称的公文。那个主意的行事在非常的大程度上取决于 regexp 是或不是享有标记 g。

1经 regexp 未有标明 g,那么 match() 方法就不得不在 stringObject
中实践1遍相配。要是没有找到别的匹配的公文, match() 将回到
null。不然,它将再次来到2个数组,个中存放了与它找到的相配文本有关的音信。该数组的第
0
个要素存放的是合作文本,而别的的成分存放的是与圆括号分组相称的公文。除了那些健康的数组成分之外,重回的数组还有三个属性。index
属性指明相称文本在 stringObject 中的地方,input 属性是对 stringObject
自己的引用。

只要 regexp 具备标识 g,则 match() 方法将执行全局检索,找到 stringObject
中的全体相称子字符串。若未有找到其余相配的子串,则赶回
null。如果找到了3个或多个相配子串,则赶回1个数组。但是它的数组元素中存放的是
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不会被剪切,重临的数组仅包蕴3个stringObject字符串。

如果separator为空字符串可能是极度空字符串的正则表明式,那么
stringObject 中的每一种字符之间都会被断开。

万一separator相称stringObject字符串的初叶,则赶回数组的第多少个成分为空字符串。同样,假如separator相称stringObject字符串的末尾,则赶回数组的末尾贰个要素为空字符串。

假若separator为形如/()/被圆括号括起来的正则表明式,分隔符相称的文本将在数组中回到。否则,重返数组将不包蕴分割符文本。

批注:String.split() 实施的操作与 Array.join 施行的操作是倒转的。

只要 regexp 未有标明 g,那么 match() 方法就不得不在 stringObject
中举办3遍相配。即便未有找到此外相配的文本, match() 将回到
null。不然,它将回到一个数组,在那之中存放了与它找到的相称文本有关的新闻。该数组的第
0
个要素存放的是同盟文本,而此外的成分存放的是与正则表明式的子表达式相称的公文。除了这几个健康的数组成分之外,重回的数组还包蕴八个目标属性。
index 属性申明的是十分文本的开头字符在 stringObject 中的地点,input
属性评释的是对 stringObject 的引用。

RegExp对象

若是 regexp 具备标识 g,则 match() 方法将实践全局检索,找到 stringObject
中的全体相配子字符串。若未有找到任何相配的子串,则赶回
null。要是找到了一个或四个相配子串,则赶回1个数组。可是全局相配重临的数组的剧情与前者大分化样,它的数组元素中存放的是
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

 

发觉不一致等的地点了吧,把函数描述杰出读贰回,就知晓了^_^

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”修饰符的正则表明式,该属性存放1个字符地点,它紧跟
RegExp.exec() 和 RegExp.test() 方法上次至极的职务。这么些艺术运用
lastIndex
属性所指的职位作为下次搜索的起首点。通过反复调用那八个主意就足以遍历三个字符串中的全体相配文本。注意不含有标识”g”
和不意味着全局形式的 RegExp 对象不可能采纳 lastIndex 属性。

lastIndex是可读可写的天性。能够每一天设置它,以钦命目的字符串中下二回寻找的起来地点。当方法
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&

返回值

再次来到1个数组,个中存放相称的结果。若是未找到相配,则赶回 null。

如上所述是笔者给大家介绍的一视同仁解析JS字符串和正则表明式中的match、replace、exec等函数,希望对大家全部援助,假设我们有别的疑问请给小编留言,我会及时回复我们的。在此也十分谢谢大家对剧本之家网址的支撑!

亚洲必赢官网,说明

具备RegExp和String情势相配方法中,exec()
方法是最强劲的,它是3个通用的办法,比较 RegExp.test(), String.search(),
String.replace(), 和 String.match() 方法,某种程度上,使用它特别复杂。

exec()搜索string中相称RegExpObject的文书。假如 exec()
开掘3个卓绝,则赶回一个结实数组。不然,再次来到 null。结果数组的第 0
个因素是相配文本,第 壹 个因素是与 RegExpObject 的第 二个括号子表达式相相称的文书(假如有的话),第 二 个成分是与 RegExpObject
的第 三个子表达式相相配的公文,就那样类推。这几个数组的length属性表示数组的要素个数。除了数组成分和
length 属性之外,exec() 方法重回的值还有多少个天性。index
属性表明的是相称文本的初步地方。input 属性则是 string。当 RegExpObject
是非全局的 RegExp 对象时,这些再次来到数组与方法 String.match()
重临的数组是千篇一律的。

当 RegExpObject 是多少个大局正则表达式时,exec()
的作为就有点复杂一些。它会在 RegExpObject 的 lastIndex
属性钦点的字符处初叶搜寻字符串 string。当它开掘一个合作,它设置
lastIndex 属性为相配文本后第三个字符的岗位。那正是说,能够屡屡调用
exec() 方法来遍历字符串中的全体相称文本。当 exec()
再也找不到卓殊的文件时,它将回来 null,并把 lastIndex 属性重新载入参数为
0。在中标地同盟了字符串之后,要是初步探求新字符串,必须密切手动重新载入参数lastIndex 属性为 0。

在意,无论 RegExpObject 是不是是全局形式,exec()
总是在回到数组中包罗每回相配的总体细节。那是 exec() 与 String.match()
的分歧之处,在大局模式下后者再次来到的音信少得多。要想获得全局情势的完整格局相配音信,唯1的法子是在2个循环往复中再3调用
exec() 方法。

你大概感兴趣的稿子:

  • JS正则截取多少个字符串之间及字符串前后内容的艺术
  • JS使用正则截取五个字符串之间的字符串实现方式详解
  • javascript将字符串中的多少个空格替换为二个空格的正则实例
  • JavaScript利用正则表达式替换字符串中的内容
  • JS剖断输入的字符串是还是不是是数字的艺术(正则表明式)
  • JS不用正则验证输入的字符串是不是为空(包括空格)的兑今世码
  • String字符串相配javascript
    正则表明式
  • javascript使用正则完成去掉字符串前边的全体0

test()

概念和用法

test()方法用于检查测试三个字符串是或不是相配某些形式。

语法

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

返回值

假定字符串 string 中带有与 RegExpObject 相配的文书,则赶回
true,不然重回 false。

说明

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

网站地图xml地图