JavaScript(九)正则表达式

RegExp 正则表达式 ,一般被创建出来就是用于 字符串的替换 查找方法中的 1 创建正则表达式var reg = pattern flag;

RegExp

正则表达式 ,一般被创建出来就是用于 字符串的替换 查找方法中的

1.创建正则表达式

var reg = /pattern/flag;    // 字面量   
var reg = new RegExp("pattern","flags");//构造函数

2.匹配模式

  g  global      全局匹配

  i  case-insensitive  不区分大小写

  m  multiline     多行模式

3.元字符

  ()  []  {}  \  /  |  ^  $  *  +  .  

  元字符需要用 转义字符   \ 来转换  

4.匹配规则

. 匹配除了 /n 和 /r 剩下的全部字符
\n 匹配字符换行(\r回车,\t制表符,\f换页) 
\d 所有数字
\D 所有非数字
\s 所有空白符
\S 所有非空白符
\b 匹配所有单词边界
\B 匹配所有非单词边界
\w 匹配单词
\W 匹配非单词
[abc] 匹配方括号内的内容
[^abc] 匹配非括号内的内容
[a-z] 匹配a到z 26个字母  -标识范围

5.量词

匹配0次或这1次(又或者没有)
* 匹配0次或多次
+ 匹配1次或多次
{n} 匹配n个
{n,} 匹配至少n个
{n,m} 匹配至少n次  不超过m次.


   在变量内   ^  和 $ 分别代表  开头和结束

6.字符串中用到正则的方法  str.function(reg) 

var str = '123abc';
var reg = /[a-z]+/g;    //匹配多个字母

search 方法 查找匹配内容的起始位置 

str.search(reg); //返回3  从第4位开始

replace 方法 替换匹配的内容

str.replace(reg,'你好');//返回 ‘123你好’

replace 结合正则表达式

var str = '123,abc';
var reg = /(\d{3}),([a-z]{3})/g;  
str.replace(reg,'$2@$1')//   'abc@123'  $1和$2分别代表第一个()和第二个()匹配出的内容  
               //$1 $2 写在字符串里面

 

var str = '123-abcd';
var reg = /(\d{3})-([a-z]{4})/g;

var data = str.replace(reg,function($1,$2,$3){
    return $2+"+"+$3;//'123+abcd'
})//这里传函数的时候    第一个形参 是原字符串   第二个参数是第一组第三个参数是第二组

正则表达式里面 小括号() 括起来的部分就是一个分组   分别是 $1,$2,$3....

 

经过一段时间上的使用,后来发现 就上面这些在实际应用中还是不够的,就去看了看全威的网站

补充一些内容   

  几个重要元字符 

?            将?跟在其他限定符(*,+,?,{n},{n,},{n,m})后面 ,将匹配模式变成非贪婪模式 

        就是只匹配能匹配的最少的内容  如 {n,}?  就只匹配n个   

 

(pattern)      这就是分组匹配,把每个被括号里的正则匹配出来的内容,当做一个组,存在Matches

      集合中,js可以配合 replace使用 $1,$2....分别代表各个组匹配出的内容,

      用法就在上面replace

 

(?:pattern)    匹配patttern的内容,但是不会作为分组使用,即不会被存在Matches集合中

      配合 | 可以实现更简易的  或操作  

  str

 

不使用   ?:  进行匹配  

匹配结果

 

replace替换  (从这里看出 分组存在)

 

当更改   正则表达式  使用  ?:    可以发现匹配出的结果都是相同的,不同的是在替换的时候$1并不存在,这里把$1当成字符串了

 

 (?=pattern)  正向肯定预查(look ahead positive assert)[预览,积极的断言]

        在任何匹配pattern的字符串开始处,匹配查找字符串,这是一个非获取匹配

         预查不消耗字符串

 

 (?!pattern)  正向否定预查(negative assert)[消极的 断言]

         在任何匹配的pattern 的字符串开始处匹配字符串,同样是一个非捕获匹配

        同样预查不消耗字符串

 

var reg = /window(?=7|8|10)/g;    //可以匹配出    window7/window8/window10    中的window    但是不能匹配出window9中的window

 

 

var reg = /window(?!7|8|10)/g;    //就不能匹配出  window7/window8/window10    能匹配出除了  window9等等等

 

 

(?<=pattern)  反向肯定预查 与正向的功能基本相同,就是换了预查的方向 查看前面

        仍然是预查,不消耗字符串

 

 

(?<!pattern)  反向否定预查  同样预查不消耗字符串,