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)  反向否定预查  同样预查不消耗字符串,

JavaScript(九)正则表达式的更多相关文章

  1. 详解Javascript中正则表达式的使用

    正则表达式用来处理字符串特别好用,在JavaScript中能用到正则表达式的地方有很多,本文对正则表达式基础知识和Javascript中正则表达式的使用做一个总结. 第一部分简单列举了正则表达式在Ja ...

  2. javascript类型系统——正则表达式RegExp类型

    × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String ...

  3. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  4. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  5. 深入浅出的javascript的正则表达式学习教程

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  6. JavaScript验证正则表达式大全

    JavaScript验证正则表达式大全,搜集最全的JavaScript验证正则表达式,开始查看吧,这里的都是正则表达式的例子,具体和函数结合的使用方法,还请查看下篇文章<JavaScript使用 ...

  7. 如何使用JavaScript和正则表达式进行数据验证

    利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作,下面与大家分享下如何使用JavaScript和正则表达式进行数据验证,感兴趣的朋友可以参考下哈 数据验证 ...

  8. JavaScript常用正则表达式与应用(一)

    JavaScript的String类和RegExp对象类都定义了相关方法使用正则表达式进行模式匹配,本文将以连载方式介绍JavaScript常用正则表达式与相关应用,欢迎交流 本节是连载一,首先介绍J ...

  9. 从头开始学JavaScript (九)——执行环境和作用域

    原文:从头开始学JavaScript (九)--执行环境和作用域 一.执行环境:定义了变量或者函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有与之关联的变量对象. 变量对象:保存着环境中 ...

  10. javascript基础-正则表达式

    概述 正则表达式被用来检索.替换那些符合某个模式的文本 标准正则表达式语法 javascript对正则表达式的支持 替代写法 逆向环视 //需求:替换mpre.cnsuning.com为${pre}, ...

随机推荐

  1. 携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发

    官方教程:https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8 ...

  2. (linux shell)第一章--小试牛刀(下)

    文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...

  3. C#的SplitPanel如何设置上下和左右

    定位到Orientation属性即可

  4. C语言中结构体变量之间赋值

    近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...

  5. POJ 1651 Multiplication Puzzle 区间dp(水

    题目链接:id=1651">点击打开链 题意: 给定一个数组,每次能够选择内部的一个数 i 消除,获得的价值就是 a[i-1] * a[i] * a[i+1] 问最小价值 思路: dp ...

  6. python 时区

    Python中的时区处理  http://tech.glowing.com/cn/dealing-with-timezone-in-python/ Python时区设置方法与pytz查询时区教程_py ...

  7. go2基本类型

    /* Go基本类型 布尔型:bool - 长度:1字节 - 取值范围:true, false - 注意事项:不可以用数字代表true或false 整型:int/uint - 根据运行平台可能为32或6 ...

  8. 使Android 自带SDK 完美支持HTML5 之 html5webview

    HTML5出来之后,webkit 大部分都支持了,但是由于历史原因,支持限度有限,我在Android 4.0使用 hao123的客户端访问youxi.cn期望可以万网手机HTML5游戏但是有些失望,进 ...

  9. dubbo和SpringCould

    作为常用的微服务框架,这两者经常会被对比,但实际上两者有不少差异. dubbo好比组装电脑,很多东西可以自己选配,自由度高但对于小白难入门,很可能因为某个组件没选好,导致完全用不起来. SpringC ...

  10. POJ3675 Telescope 圆和多边形的交

    POJ3675 用三角剖分可以轻松搞定,数据也小 随便AC. #include<iostream> #include<stdio.h> #include<stdlib.h ...