1、正则表达式的创建方式

两种方式创建:通过new修饰符创建和字面量的方式创建

1》new修饰符方式创建

 var b2=new RegExp('Box','ig');  //第二个参数是 模式字符串: 用来限定 匹配的方式
// g :全局匹配 i:忽略大小写的匹配 m :多行匹配

2》字面量的方式创建

 var d= /Box/i;    //   //之间的是 参数字符串;;第二个/ 后面的是 模式字符串

 2、js中正则表达式的测试方式

两种测试方式:test()方法:检测字符串中是否“含有”对应的模式字符串,返回值是true和false;

exec()方法:检测字符串中是否“含有”对应的模式字符串,返回值是匹配到的字符串的数组,如果没有就返回null(返回值类型:object)

 var d= /Box/i;  //忽略大小写的匹配
alert(d.test('box')); //true alert(/Box/i.test('this is a box')); //true : 匹配字符串中是否 “含有” 匹配字符串 alert(d.exec('box')); //box alert( typeof d.exec('s')); //object

3、String类方法中使用的正则表达式

String类的match()、search()、replace()、split()

1》match()字符串的匹配方法,返回匹配到的数组

 var pattern=/Box/gi; //全局匹配  不区分大小写
var b ='This is a box!It is a small box';
alert(b.match(pattern)); //返回 的是 匹配到的数组 (box,box)
//如果不是全局匹配,,那么 只会 匹配第一个 ,返回的数组 只会含有一个 元素
pattern =/Box/i;
alert(b.match(pattern)); //box

2》search()返回第一个匹配到的字符串索引位置 ,g(全局匹配)在这里不起作用,如果没有匹配到返回-1

alert(b.search(pattern));     //

3》replace():找到要被匹配的字符串,然后用指定的字符串进行替换;返回值:返回替换后的字符串

 alert(b.replace(pattern,'shit'));  //返回 替换后的 字符串

注意:如果不是全局匹配的换,只有第一个匹配到的字符串被替换

4》split()按照指定的 “匹配符” 进行分割

 alert(b.split(pattern));      // This is a ,!It is a small ,

正则表达式的静态方法和实例方法在这里就不做介绍,因为不常用,所以用的时候在查。

4、获取和控制(*重点)

1》单个字符和数字的匹配

下面通过代码进行演示其使用的方式

 var pattern =/[a-z]oogle/;   //[a-z] 表示  小写字母中的 任意一个
alert(pattern.test("google")); //true //下面一定要注意(****)
var pattern =/[A-Z]oogle/; //匹配的时候 是 匹配 字符串中是否含有 “匹配的字符串”
alert(pattern.test('aaaaaaGGGGoogleaaaa')); //true alert(/[0-9]aaaa/.test("444aaaa")); //true

还可以进行“复合”匹配

 var pattern3=/[a-zA-Z0-9]/; //匹配的 a-z和A-Z和0-9都可以  类似于"/w"

 var pattern4=/[^a-z]oogle/;   //[^a-z] 代表的就是 非 a-z  的字符

2》空白字符的匹配 

代码演示:

 //空格字符的匹配  \s
var pattern =/goo\sgle/;
var str='goo gle'; alert(pattern.test(str)); //true

3》锚字符的匹配

主要是对匹配的控制

代码演示:

 var pattern ='/^[0-9]oogle/'  //^  位于 匹配字符串的 开头  代表 匹配字符串的 匹配是 从 字符串的  开头开始的
alert(pattern.test("4444oogle"));//false 因为是 从 最前面的 那个 4 进行匹配的 alert(/^[0-9]+oogle/.test("4444oogle")); //true + 代表是 1个 或 多个 //全局控制
var pattern2=/^\woogle$/; //^讲开头控制住,,$将结尾控制住,,所以 就是全局控制,,,\w 代表 匹配 数字字母和_

\b:行尾匹配

 var pattern2 =/google\b/;    //\b 代表是否到达结尾;;;就是e 是否是 最后一个字符
var str2='googleeeee'; alert(pattern2.test(str2)); //false
alert(pattern2.test('google')); //true

5》重复匹配 

代码演示:

 var pattern =/go{3}gle/;   //限定 o 为三个
var pattern2=/go{2,4}gle/; //限定 o 为2 到4 个
var pattern3=/go{3,}gle/; //限定o为 3个 或者 3个以上 var d='google';
alert(pattern.test(d)); //false
alert(pattern2.test('goooogle')); //true
alert(pattern3.test('gooooogle')); //true

6》替代匹配

代码演示:

 var pattern =/box|\w+oogle/;  //字符串匹配到 'box' 或者 '\w+oogle'都会返回 true
alert(pattern.test('box')); //true
alert(pattern.test('shigggoogle')); //true

7》分组匹配

记录字符:

使用RegExp的静态属性 $1 获得 是分组中的内容。

()分组匹配演示:

 var pattern3 =/google{4,8}$/;    //代表 匹配 e字符 4到 8 次
var str3='googleeeee'; alert(pattern3.test(str3)); //true var pattern4=/(google){4,8}/; //表示 匹配 google 4到 8 次
alert(pattern4.test('googlegooglegooglegoogle'));//true

$1:取到匹配到的第一个分组的字符串(难点):

 var pattern =/8(.*)8/;
var str='This is a 8google8';
//只要匹配 一次就可以;;不管是怎样的 匹配
//pattern.test(str); str.match(pattern);//和上面 一样,,下面也能够 取到 分组匹配到的 字符串 //上面两种任意一种方式还要是匹配,之后就可以通过下面 取到第一分组 匹配到的字符串。
alert(RegExp.$1); //google

演示一个案例,将匹配到的字符串 加粗,打印出来

 var str2='You are a 8shit8';

 document.write(str2.replace(pattern,'<strong>$1</strong>'));   //$1  取出 匹配到的  分组字符串 

演示第二个案例,将 'google baidu'  两个单词位置调换

 var pattern2=/(.*)\s(.*)/;
var str='google baidu';
alert(str.replace(pattern2,'$2 $1')); //将 他们的 位置 调换

8》贪婪和惰性

示例一:

 var pattern =/[a-z]+/;      //贪婪模式
var str='ddfdfds'; alert(str.replace(pattern,1)); //1 //只会 匹配到 第一个 将第一个 替换掉 pattern=/[a-z]/g; //进行全局匹配 alert(str.replace(pattern,1)); // //使用 惰性模式
pattern =/[a-z]+?/;
alert(str.replace(pattern,1)); //1dfdfds

下面是显示贪婪模式的经典例子

 //贪婪模式
var pattern2=/8(.*)8/g;
var str='8google8 8google8 8google8'; //最先 匹配的 两边的 88 因为 . 也 匹配 8
//<strong>google8 8google8 8google</strong>
document.write(str.replace(pattern2,'<strong>$1</strong>'));

输出结果:

使用惰性模式:

 //下面使用 惰性模式
pattern2=/8(.*?)8/g;
document.write(str.replace(pattern2,"<strong>$1</strong>"));
//输出结果:
//<strong>google</strong>
//<strong>google</strong>
//<strong>google</strong>

输出结果:

使用 另一种 禁止贪婪的模式:

 pattern2=/8([^8]*)8/g;
document.write(str.replace(pattern2,"<strong>$1</strong>")); //和上面 的 实现的 效果一样

输出结果:

js之正则表达式(上)的更多相关文章

  1. js常用正则表达式2

    字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...

  2. JS常用正则表达式备忘录

    摘要: 玩转正则表达式. 原文:JS常用正则表达式备忘录 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 正则表达式或"regex"用于匹配字符串的各个部分 下面是 ...

  3. JS的正则表达式简介

    1.JS的正则表达式 1.1 简介 JS的正则表达式比较简单,总体上只分为两个功能:一个是test——用于匹配字符串是否符合规定的正则表达式规则:另外一个是exec——用于获取匹配到的数据. 1.2 ...

  4. Js与正则表达式

    原本接着上面的章节,这一章节应该是写 Jquery事件的,由工作需要,暂时横插一篇正则表达式的学习,这里是边学边记录,错误之处,希望指正,提拔一二,不甚感激! 此章节有 1.1 正则表达式的定义 1. ...

  5. js常用正则表达式,滚蛋吧!你们测试组bug,让你挑

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. JS 之正则表达式

    字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...

  7. js课程 4-12 js中正则表达式如何使用

    js课程 4-12 js中正则表达式如何使用 一.总结 一句话总结: 1.js正则表达式手册取哪里找? w3cschool或者菜鸟教程->找到js正则表达式->完整的RegExp参考手册这 ...

  8. js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译)

    js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译) 一.总结 1. RegExp的属性和方法,就是RegE ...

  9. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)

    js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global) 一.总结 1. ...

随机推荐

  1. log4net保存到数据库系列三、代码中xml配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  2. MongoDB - The mongo Shell, Configure the mongo Shell

    Customize the Prompt You may modify the content of the prompt by setting the variable prompt in the  ...

  3. .NET下实现分布式缓存系统Memcached (转自网络)

    Memcached在.NET中的应用 一.Memcached服务器端的安装(此处将其作为系统服务安装) 下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, ...

  4. Flask Restful Small Demo

    参考: http://www.pythondoc.com/flask-restful/first.html 什么是Rest Client-Server:服务器端与客户端分离. Stateless(无状 ...

  5. github 学习笔记【一】

    这几天在学习github ,其实学了主要用来管理自己的项目!因为要在家里和公司两头做! 所以就开始学习使用!目前熟练几个命令,其他的一边用一遍学吧!想一举成功应该是不太可能的! 反复记忆才能更好,据说 ...

  6. FFT结果的物理意义

    图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度.如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低:而对 于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈 ...

  7. 在Linux下进行磁盘分区

      1.         分区前的规划   2.         查看本机上的磁盘信息   3.         对第二个磁盘进行交换式分区操作(输入m为帮助信息) 图 1:n为新建分区 图 2:p为 ...

  8. @Register指令

    @Register指令用来创建标记前缀和自定义控件之间的关联,这为开发人员提供了一种在ASP.NET应用程序文件(包括网页.用户控件和母板页)中引用自定义控件的简单方法. <%@Register ...

  9. Objective-C设计模式——原型Prototype(对象创建)

    1.原型 原型设计模式所谓原型设计模式,其实就是对象复制,这个特性在所有语言基本上都是存在的. 我们知道在OC中,对象赋值其实是对对象的引用复制,其实就是相当于C语言中的指针.创建了一个新的变量,但是 ...

  10. java.lang.ThreadLocal源码分析

    ThreadLocal类提供线程本地变量,为变量在每个线程创建一个副本,每个线程可以访问自己内部的副本变量. 比如,有这样一个需求,需要为每个线程创建一个独一无二的标识,这个标识在第一次调用Threa ...