正则表达式是一个拆分字符串并查询相关信息的过程;是现代开发中很重要的一环。作为一个web开发人员必须牢牢掌握这项技能,才能尽情得在js中驰骋。

1、创建正则表达式:

  正则表达式(regular expression)和Javascript的其他对象类型一样,也就是我们经常看到的RegExp对象,它有二种方式来创建:

第一种:正则字面量形式

var test= /pattern/flags;

第二种:RegExp对象构造函数形式

var test=new RegExp(pattern,flags);

  参数pattern是一个字符串,指定了正则表达式的模式。

  参数flags包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。

2、RegExp对象方法:

test():

  检测所搜索的字符串是否与该正则模式匹配,返回true或false。

例如:

var a="aaisccc",demo=/\D/,d=demo.test(a);
alert(d);//true

exec(str)

  检测所搜索的字符串是否与正则模式匹配,它返回一个数组,其中存放匹配的结果,未找到匹配,则返回null。

  参数str表示要匹配正则表达式的字符串。

例子:

 var a="1a2b3c456he";
var test=/\d/g;
var t;
while((t=test.exec(a))!=null){document.write(t);//}

  上述代码通过循环中反复地调用 exec() 方法,来获得完整的匹配信息。

2.1、String对象的match()replace()split()search()也用到了正则的模式匹配;

一、match方法:

  该方法类似 indexOf() ,但是它返回指定的值,而不是字符串的位置。

例子:

var a="1a2b3c456he";
var test=/\d+/g;
var t;
  t=a.match(test);
  document.write(t);//[1,2,3,456]

二、replace方法:

语法:string.replace(regexp/substr,replacement)

  参数regexp/substr表示子字符串或要替换的模式的 RegExp 对象。

  参数replacement表示要替换的文本或函数。此外,replacement 中的 $ 字符具有特定的含义;$1、$2、...、$9表示将要替换与 regexp 中的第 1 到第 9 个子表达式相匹配的文本。

例子:

 var a="1a2b3c456d";
var test=/\d+/g;
var t;
  t=a.replace(test,"#");
  document.write(t);//#a#b#c#d

去除字符串前后空格:

 var a="  1a2b3c456d  ";
var test=/(^\s*)|(\s*$)/g;
var t;
  t=a.replace(test,"");
  document.write(t);//1a2b3c456d //------------------------------------
// 其中在第二个参数中可以插入回调函数
// 可以将上面的例子改为 t=a.replace(test.fn)
// function fn(){return "";}功能与上面相同
//------------------------------------

三、split方法:

  该方法将一个字符串分割为子字符串,然后以字符串数组形式返回。

例子:

var a="a5h4a";
var t;
t=a.split(/\d/g);
document.write(t);//a,h,a

四、search方法:

  该方法搜索与正则表达式相匹配的子字符串。返回与正则匹配到的第一个子串的位置。匹配不到则返回-1。

  与indexOf方法不同的是它的参数是强制正则的,如果传入一个非正则表达式对象,则会使用 new RegExp(obj) 隐式地将其转换为正则表达式对象。search() 方法不执行全局匹配,它将忽略标志 g。

例子:

 var a="abc5h4a";
var t=a.search(/\d/);
  document.write(t);//

  我们应了解到正则表达式中所有的字母和数字都是按照字面意思与自身相匹配的,JavaScript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非字母字符。

正则表达式中的元字符

. 查找任意字符,除了换行和行结束符。等价于[^\n] 
\w 查找单词字符。  等价于[a-zA-Z0-9] 
\W 查找非单词字符。等价于[^a-zA-Z0-9] 
\d 查找数字。  等价于[0-9]
\D 查找非数字字符。等价于[^0-9] 
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配单词边界。
\B 匹配非单词边界。
\0 查找 NUL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

方括号"[ ]"

[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号内的字符。
[0-9] 查找 0 至 9 的数字。
[a-z] 查找小写 a 到 z 的字符。
[A-Z] 查找 A 到Z 的字符。

'^'和'$'

分别表示一个字符串的开始和结束位置。

'*','+'和'?'

这三个符号它们分别表示“0个或更多”,“一个或更多”还有“0个或一个”。

*等价于{0,}

?等价于 {0, 1}

+等价于{1,}

“{}”

{n} 精确匹配n次 
{n,} 匹配n次以上 
{n,m} 匹配n-m次

选择 “|”

字符| 用于分隔供选择的字符。

分组"()"

还可以分为

•捕获性分组("()")
•非捕获性分组("(?:)")

  捕获分组一般使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个捕获组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

例子:

 var a="5552-41";
var t=a.replace(/(\d+)-(\d+)/,"$2-$1");
  document.write(t);//41-5552

  

  非捕获组只匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。

看个例子:

var a="5552-41";
var t=a.replace(/(?:\d+)-(\d+)/,"$1-$2");
document.write(t);//41-$2 从结果可以看出来,第一个四位数字没有被捕获到。所以$1为(\d{+})捕获的串。

反向引用:

引用前面捕获存储的内容,类似\1,\2这样的语法,来看例子就明白了:

var a="abcddf";
var c=a.match(/([a-f])\1/);
document.write(c);//dd,d
          // \1是动态确定的,根据前面的捕获组来确定;例如第一次捕获的是a,则将a被放在一个捕获组里,这个捕获组的编号是1;
          //因为编号是1的捕获组里存放的是上一步中捕获的a,所以这个\1就是指代a,所以\1的意思就是再次匹配a;失败;接着下一轮匹配直到匹配到dd这个字符;成功。

js中的正则表达式的运用的更多相关文章

  1. JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象

    JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义      查找以八进制数 规定的字符.     查找以十六进制数 规定 ...

  2. JS中应用正则表达式转换大小写

    JS中应用正则表达式转换大小写,代码很简单,看代码: 以下首字母大写,其它字母小写 <script type="text/javascript"> function r ...

  3. 如何在JS中应用正则表达式

    背景:在之前的随笔中写过C#中如何使用正则表达式,这篇随笔主要讲如何在js中应用正则表达式 如下代码: $("#zhengze").click(function () { var ...

  4. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

  5. 【js 正则表达式】记录所有在js中使用正则表达式的情况

    说实话,对正则表达式有些许的畏惧感,之前的每次只要碰到需要正则表达式去匹配的情况,都会刻意的躲过或者直接从度娘处获取. 此时此刻,感觉到了某一个特定的点去触及她.但笔者对于正则表达式使用上的理解是这样 ...

  6. js中的正则表达式

    一.正则中的汉字 常见的:/[^\x00-\x7F]+?/ /^[\u2E80-\u9FFF]+$/ 过滤汉字即是:string.replace(/^[\u2E80-\u9FFF]+$/g, &quo ...

  7. js中的正则表达式入门

    什么是正则表达式呢? 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串.将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等 ...

  8. 第十八节 JS中的正则表达式

    复习字符串操作: search 查找 substring 获取子字符串 charAt 获取某个字符 split 分割字符串,获取数组 var str = 'abcdefghijk'; alert(st ...

  9. 浅谈js中的正则表达式

    很多时候多会被正则表达式搞的晕头转向,最近抽出时间对正则表达式进行了系统的学习,整理如下: 正则表达式的创建 两种方法,一种是直接写,由包含在斜杠之间的模式组成:另一种是调用RegExp对象的构造函数 ...

随机推荐

  1. Asp.net的生命周期应用之IHttpModule和IHttpHandler

    摘自:http://www.cnblogs.com/JimmyZhang/archive/2007/11/25/971878.html 从 Http 请求处理流程 一文的最后的一幅图中可以看到,在Ht ...

  2. 1091 N-自守数 (15 分)

    // 建一个判断函数,接受两个整形的变量,再通过循环按位判断相等与否,主体函数中调用被调函数,建立一个判断变量.#include <iostream> using namespace st ...

  3. Codeforces Round #517

    传送门 A. Cram Time 你有一本书,阅读第\(i\)页需要花费\(i\)的时间.你第一天有\(a\)的时间,第二天有\(b\)的时间,问你的总阅读页数的最大值. Input: 一行包含\(2 ...

  4. 在MVC程序中使用MongoDB数据库

    .net项目中混搭数据库 安装和部署 C#中使用MongoDB MongoDb与关系型数据库区别 开机自启动 关系型数据库和非关系型数据口可以混搭 MongoDB是一个高性能,开源,无模式的,基于分布 ...

  5. MySQL Migration Tool报“initialized java loader”错误的问题

    MySQL Migration Tool报“initialized java loader”错误的问题   运行MySQL Migration Tool时经常会提示“An error occured ...

  6. C# 文件操作系列一

    在.Net环境中,所有关于文件操作的类都在System.IO命名空间下,注:在修改文件时,安全性显得格外重要,但是本随笔不过多讲述安全性,这里假设我们有足够的权限. 1.管理文件系统 先通过一幅图来了 ...

  7. Unity 依赖注入

    关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...

  8. Python离线安装依赖包

    1.制作requirement.txt pip freeze > requirement.txt 2.下载离线Pytho安装包 pip download -r requirement.txt - ...

  9. Java高并发之锁优化

    本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 public synchronized void syncMethod(){ othercode1(); ...

  10. EJB与JavaBean

    JavaBean是一个组件,而EJB就是一个组建框架.JavaBean面向的是业务逻辑和表示层的显示,通过编写一个JavaBean,可以将业务逻辑的事件和事务都放在其中,然后通过它的变量属性将所需要的 ...