RegExp对象的章程, 正则相称式/abc/匹配原字符串abc相称进度

正则表明式是讲述壹组字符串特征的方式,用来协作特定的字符串

壹.正则表明式相称原则

图片 1

原字符串

要害分四个部分:着力语法RegExp对象的不2秘诀、[JS中协理正则表明式的String对象方法](http://www.cnblogs.com/gulei/p/6296663.html#a3)

私吞字符和零上升的幅度

在正则表明式匹配进程中,借使子表达式相配到的是字符内容,并被保存在结果个中,那么就说该子表明式是挤占字符的。假设实表达式占领的只是岗位,恐怕未有保存到结果中去,那么就说该子表达式是零升幅的。

零开间的子表明式在万分成功或然同盟战败未来,把相配权交给下多个子说明式,下1个子表明式会在零大幅的子表明式地点上马。那是零增长幅度的子表达式的特征,不占用字符宽度。

 

正则相称格局 /abc/

 正则相配式/abc/相称原字符串abc相配进度:

首先由字符a取得相配权,因为它在/abc/中排第叁人,从地方0伊始相称,相配成功,然后保留结果a,把相配权交给第3顺位b,b从岗位一始发相称,相配成功,保存结果并把匹配权交给c,c从职务二初始相配,相称成功保存结果,并出口相配结果abc,起第一人置为0,甘休位置为叁。

一、基本语法

二.正则匹配中用到的措施

一.直接量语法 /pattern/attributes;

贰.开立RegExp对象的语法  var regepx = new RegExp(pattern,attributes);

参数 pattern
是2个字符串,制定了正则表明式的规则方式,attributes是八个可选参数,包括三种特性i , g , m 分别是忽视大小写;全局相配;分段相称;

在JS中,正则表明式为目的,用如下二种格局定义:

1.search()方法 

基本语法: stringObject.search(regexp)

参数:regexp是必要在stringObject中寻觅的正则表达式 

再次来到值:再次回到在stringObject中首先个与regexp相相称的职位,借使未有就再次回到-一

留神:search()方法不支持全局属性g,而且它每回都会在字符串的始发地方展开查找。

直白量法: /pattern/attributes;成立RegExp对象法:new RegExp(pattern,attributes);

2.match()方法

主干语法 stringObject.match(searchValue)
大概stringObject.match(regexp)

参数searchValue 供给搜求字符串的值 
regexp是内需在stringObject中搜索的正则表明式

返回值:
                 
它可以全局相称情势,全局般配的话,它回到的是二个数组。假若未有找到任何的1个相称,那么它将再次回到的是null;再次回到的数组内有四个要素,第多个要素的寄放的是卓殊的文本,还有贰个目的属性;index属性阐明的是相配文本的苗头字符在stringObject中的地点;input属性注明的是对stringObject对象的引用。

var reg=/hi/i;//字面量
var reg=new RegExp('hi','i');//构造函数(参数1:最简单的正则匹配字母hi;参数2:表示匹配时不分大小写)

3.replace()方法

该办法用于在字符串中应用部分字符替换另一对字符,大概替换1个与正则表达式相配的子字符串

着力语法: stringObject.replace(regexp/substr,replacement);

参数:regexp/substr; 字符串恐怕要求替换情势的RegExp对象

         
 replacement:贰个字符串的值,被沟通的文件只怕生成替换文本的函数

重临值:再次来到替换后的新字符串

 

4.split()方法

该办法把1个字符串分割成字符串数组。

着力语法:stringObject.split(separator,howmany);

separator[必填项],字符串或正则表达式,该参数钦定的地点分割stringObject;

 howmany[可选]
该参数钦赐再次回到的数组的最大尺寸,倘诺设置了该参数,再次回到的子字符串不会多于这几个参数钦命的数组。假如未有设置该参数的话,整个字符串都会被划分,不思虑她的长短。

重临值:被切割的字符串数组

元字符:( [ { \ ^ $ | ) ? * + .(若相配元字符自个儿须要转义)

5.test()方法

大旨语法:RegExpObject.test(str);

参数:str是要检验的字符串

再次回到值:假如与被检查实验字符串想相配,重返true,反之,重临false;

 1、直接量

叁.JavaScript正则表达式中的元字符

  最轻巧易行的正则相配情势,使用字符本身进行相称

    元字符                                   含义

      .                                                   
查找任意的单个字符,除换行符外

    \w                                                 
任意叁个字母或数字或下划线,A_Za_Z0_9,_中任                      
                                                                     
                              意一个 

    \W                                                 
查找非单词的字符

    \d                                                   
相配三个数字字符

    \D                                                   
相称三个非数字字符

    \s                                                   
匹配任何空白字符,包括空格,制表符,换行符等  

    \S                                                   
相配任何非空白字符

    \b                                                   
相称三个单词边界,也正是指单词和空格间的岗位 

    \B                                                   
相称非单词边界

    \0                                                     
查找NUL字符

    \n                                                      
相称一个换行符

    \r                                                      
相配1个回车符

    \v                                                      
相配多个垂直制表符

var reg=/hi/;//匹配一个hi字符

 4.正则表明式中[] 方括号的意义

  [abc]                                    相称abc中的任意二个字符

  [0-9]                                     相配数字0-9中的任意八个

  [a-z]                                    
相称小写字母a-z中的任意叁个

(a|b|c)                               等价于[abc]
 相称abc中的任意二个

在方括号[]中最终面加上^符合能够象征取反

[^abc]                                   相配除了abc之外的即兴字符

[^a-z]                                  
 相配除了小写字母a-z之外的具有字符

 2、元字符

 伍.正则表达式中的量词和转义

   正则表明式中在需要转义的特殊字符后边加上  \ 

   如 ^字符表示卓殊起来地方的字符 包涵^本身的话 需求采纳 ^\

  元字符是1些标识和字母的组成,用来取代普通字符,元字符有.\d\w\s等,详见附表

量词

量词                                         描述

n+                                           
相配任何至少含有一个n的字符串

n*                                           
相称零个照旧八个n的字符串

n?                                           
相称零个要么三个n的字符串

n{x}                                         
相称包罗x个n的行列字符串

n{x,y}                                       
相配至少x个,最多y个n的字符串

n{x,}                                          相配至少x个的字符串

n$                                            相称以n结尾的字符串

^n                                            相配以n开端的字符串

?=n                                        相称其后交接钦命的n字符串

?!n                                         
相配其后尚未联网钦命的n字符串

var reg=/./;// .表示除换行符以外的任一字符
var reg=/\d/;// \d表示0-9的数字
...

6.贪婪方式与非贪婪格局

贪得无厌情势:匹配行为在万分成功的前提下,继续合作,尽也许多的成功相称四回。

非贪婪格局:相称行为在相当成功后,不再进行相称行为。

普遍的贪欲格局量词:{x,y} ,  {x,} ,  ? ,  * , 和  +

非贪婪形式在人欲横流形式量词后拉长3个?号,就足以把贪婪形式成为非贪婪格局

{x,y}?,{x,}?,??,*?,和 +?

 3、字符转义

  假使供给搜索元字符自己,则须求在元字符在此以前加\张开转义 

var reg=/\./;//匹配一个.
var reg=/\\/;// 匹配一个\

 4、重复

  量词用于限定它前边表明式相配的次数,有*+?{}等

var reg=/\d\d\d/;//匹配3个数字
var reg=/\d*/;//匹配任意数量数字,可能是0个
var reg=/\d+/;//匹配1个到多个数字
var reg=/\d?/;//匹配0到1个数字
var reg=/\d{3}/;//匹配3个数字
var reg=/\d{3,}/;//匹配3到多个数字
var reg=/\d{3,6}/;//匹配3到6个数字

 5、字符类

  在[]的界定中增加字符,在中括号内的元字符不要求开始展览转义‘-’表示至,它的效果为在括号中任选其一

var reg=/[abc]/;//匹配'a','b','c'其中之一
var reg=/[() +\]/;//匹配'(',')',' ','+','\'其中之一,[]内部不需要转义
var reg=/[0-9a-z]/;//匹配0至9和a至z,即[0123456789abcdefghijklmnopqrstuvwxyz]
var reg=/[0-9][a-z]/;//匹配前一个数字后一个字母的两位字符,区别于上述匹配一位字符

陆、分支条件

  使用|把不一致规则分隔开分离,类似条件选取,从左到右依次测试各种条件,满足个中任一条件就可以,当满意有个别分枝成功后就不再管其余的分层了

var reg=/0\d{2}-\d{8}|0\d{3}-\d{7}/;//匹配固定电话:前3后8或前4后7,即021-12345678或0553-7654321

7、分组

  使用()来包裹子表明式,以便对那部分子表达式全体操作,如重复或后向引用

var reg=/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/;//匹配IP地址
//意思为:((一个不大于255的数字)+‘.’)整体重复三次+(一个不大于255的数字)

8、反义

  查找不属于钦定项目以外的字符,有\D\W\S[^]等,其中\D等价于[^\d] 除数字以外任意字符

var reg=/[^abc]/;//匹配一个不是abc的字符,即除abc以外的任一字符

 玖、后向引用

  使用()分组相称的子表明式,将活动具备三个分组编号,可用来后续重复引用

var reg=/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}\2/;//这里有分组有嵌套,\1代表外层分组(下划线),\2表示内层分组(红色)

  能够自定义分组编号(即命名)语法为:(?<name>exp)或(?’name’exp),将分组命名称为name,再反向引用时语法为:\k<name>

var reg=/((?<name>2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}\k<name>/;//给分组2命名为name,后续可用该名称来引用

  仍是能够忽略当前分组得到活动编号(即潜伏分组),语法为(?:exp)

var reg=/(?:(2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}\1/;//因为第一个分组被忽略,原来的分组2变为了分组1

 10、零宽度断言(也称环视)

  用于查找在少数内容(但并不包蕴这么些剧情)在此之前或以往的事物,类似\b^$钦定一个职位,这么些地点要满意一定的原则(断言)

  (?=exp)正前瞻,本人出现的地点的末端能合作表明式exp,如:\b\w+(?=ing\b),匹配以ing结尾的单词的眼下部分,等同于下划线部分

  (?!exp)反前瞻,自己出现的职位的后边不能够相称表明式exp,如:\babc(?!ing\b),相配不以ing结尾的abc开始单词的abc,等同于下划线部分

  (?<=exp)正后顾,本人出现的职务的先头能相配表明式exp,如:(?<=\bre)\w+\b,相称以re开首的单词的后半有些,等同于下划线部分(JS不援助)

  (?<!exp)反后顾,本身出现的职责的前面无法匹配表明式exp,如:(?<!\bre)abc\b,相配以re起始的abc结尾单词的abc,等同于下划线部分(JS不帮助)

var str='reading';
var reg=/read(?=ing)/g;//正前瞻:在我们捕获read这个字符串时,筛选它接下来的字符串是不是ing
console.log(str.match(reg)[0]);//read

 11、贪婪和懒惰

  正则表明式相称时,平日在使一切表明式能得到相称的前提下,会合营尽也许多的字符,那被称之为贪婪匹配若供给懒惰相称(即尽只怕少的字符),那么只要在限定重复的软性量词后加?就可以

var str='aabab';
console.log(str.match(/a.*b/)[0]);//aabab 默认贪婪模式
console.log(str.match(/a.*?b/)[0]);//aab 开启懒惰模式 
代码/语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

 

 

 

 

 

 1贰、处理选项

  即相配规则,是不是忽略大小写,多行等

名称 说明
IgnoreCase(忽略大小写) 匹配时不区分大小写。
Multiline(多行模式) 更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
Singleline(单行模式) 更改.的含义,使它与每一个字符匹配(包括换行符\n)。
IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白并启用由#标记的注释。
ExplicitCapture(显式捕获) 仅捕获已被显式命名的组。

 

附表:常用元字符详解

元字符 类型 说明
\ 特殊 转义符号,或将下一个字符标记为特殊字符(如\d)
| 特殊 分支条件,类似条件选择把不同规则分隔开
() 特殊 分组
[] 特殊 限定字符,如[abc]
[^] 特殊 负值字符串,如[^abc]除abc以外的任何字符
{} 特殊 限定次数
^ 位置 匹配字符串的开始
$ 位置 匹配字符串的结束
\b 位置 单词的开头或结尾,也就是单词的分界处
* 量词 重复零次或更多次(任意次)
+ 量词 重复一次或更多次(至少出现一次)
量词 重复零次或一次(最多出现一次)
{n} 量词 重复n次,n为数字
{n,} 量词 重复n次到无数次
{n,m} 量词 重复n次到m次
. 匹配 匹配除换行符以外的任意字符
\d 匹配 匹配一个数字字符,等价于[0-9]
\w 匹配 匹配字母或数字或下划线或汉字,只考虑英文情况下等价于[a-zA-Z0-9_]
\s 匹配 匹配任意的空白符

 

二、RegExp对象的办法

1、test()**

  骨干语法:**RegExpObject.test(str);**

**  **该措施用于检验一个字符串是还是不是合营有个别形式(即加以的字符串使用该正则是或不是能相称到剧情),重回3个布尔值

var str="hello world";
var regexp=new RegExp("hello");//构造函数创建RegExp对象
console.log(regexp.test(str));//true
console.log(/hi/.test(str));//false,//字面量

2、exec()

  基本语法:RegExpObject.exec(str)**;**

  该措施用于检索字符串中的正则表明式的10分,重返贰个金童玉女结果的数组,假若未有相称再次来到null;不是全局的情事下与match()方法重回的数值同样

var str="hello world";
console.log(/hello/.exec(str));//["hello", index: 0, input: "hello world"] 
//第一为匹配的内容,第二为匹配的索引位置,第三为字符串本身
console.log(/hi/.exec(str));//null
console.log(/ello/.exec(str).index);//1 //index和input可以直接作为该方法返回的两个属性

 

 

三、JS中帮助正则表明式的String对象方法

1、search()

  查找:stringObject.search(regexp/str);

  该办法用于检索字符串中钦定的子字符串,或研究与正则表明式相相称的字符串,它不实行全局相配(将忽略标识g),也未尝regexp对象的lastIndex属性,且一连从字符串开首地方张开搜寻,总是回到的是stringObject相配的第1个岗位

var str = "hello"; 
console.log(str.search(/l/)); //2 返回匹配到的第一个位置(使用的regexp对象检索)
console.log(str.search('l')); //2 使用字符串进行匹配
console.log(str.search(/l/g)); //2 没有全局的概念 总是返回匹配到的第一个位置
console.log(str.search(/L/i)); //2 可以忽略大小写来检索
console.log(str.search(/a/)); //-1,如果没有检索到的话,则返回-1

2、match()

  匹配:stringObject.match(regexp/str

  该方法用于在字符串内搜寻钦定的值,或找到二个可能三个正则表明式的相称。该措施类似于indexOf()或然lastIndexOf(); 可是它回到的是钦赐的值,而不是字符串的职位;

var str = "hello"; 
console.log(str.match(/e/)); //["e", index: 1, input: "hello"] 返回一个数组,包括匹配到的字符,位置和自身
console.log(str.match('e'));//["e", index: 1, input: "hello"] 支持用字符串代替正则进行匹配
console.log(str.match(/l/g));//["l", "l"]支持全局匹配,返回匹配到的字符组成的数值

3、replace()

  替换:stringObject.replace(regexp/str,str/function);

  该格局用于在字符串中使用部分字符替换另1些字符,只怕替换2个与正则表明式相称的子字符串;私下认可只替换第二个非常的字符,能够加修饰符g进行全局替换。全体重临替换后的新字符串。

var str = "hello world";
console.log(str.replace("hello","a"));// a world,使用字符串匹配并替换
console.log(str.replace(/hello/,"b"));// b world,使用正则匹配并替换
console.log(str.replace(/l/g,""));// heo word,使用正则加装饰符g进行全局替换
console.log(str.replace(/(hello)[ ](\w+)/g,"$2 $1"));// world hello,$1,$2 代表正则中第一个和第二个分组所匹配的文本
//第二个参数是function函数
console.log(str.replace(/o/g,function(v){
  console.log(v);//打印2次o
  return '-';
}));//hell- w-rld,匹配替换为函数的返回值
console.log(str.replace(/(e).*(o)\b/g,function(){
  console.log(arguments);//["ello", "e", "o", 1, "hello world"]
  //第一个匹配的字符,第二和第三是分组匹配的内容,第四是匹配索引位置,第5个是原字符串
  return 'i';
}));// hi world

4、split()

  分割:stringObject.split(regexp/substr,[length]);

  该格局把1个字符串分割成字符串数组,length设定重返数组的长度即超越部分将被忽略(可选参数)

var str = "hello world";
console.log(str.split(" ");//["hello", "world"],使用字符分割为数组
console.log(str.split(/o/g));//["hell", " w", "rld"],使用正则匹配的内容来分割
console.log(str.split(/o/g,2));//["hell", " w"],指定返回数组的length

 

 

 

相关文章