正则表达式是由英文词语regular expression翻译过来的,就是符合某种规则的表达式。正则表达式在软件开发中应用非常广泛,例如,找出网页中的超链接,找出网页中的email地址,找出网页中的手机号码,判断输入的内容是否全部是数字,是否满足某种日期格式等等。

正表达式理解为一种对文字进行模糊匹配的语言,它用一些特殊的符号(称为元字符)来代表具有某种特征的一组字符以及该组字符重复出现的次数。例如,对于正则表达式“\d{5}(-\d{4})?”,\d就是一个元字符,它表示一个数字,{5}表示紧靠它前面的元素项连续重复5次,\d和{5}的组合\d{5}就表示匹配任意连续的5个数字字符;-\d{4}匹配的是一个连字号(-)后加上4个任意的数字,(-\d{4})?表示连字号(-)和后面的4个数字可有可无。对于整个正则表达式“\d{5}(-\d{4})?”,表示要么是5个连续的数字字符,要么是5个连续的数字后加上一个连字号(-)、再加上4个连续的数字组成的10个字符。正则表达式中的圆括号除了能将多个元素组合成一个可统一操作的组合项外,它所括起来的表达式部分还成为了一个子匹配(也叫子表达式),也就是说,我们可以用圆括号在一个长的正则表达式中划分出子表达式。这样,除了可以得到整个正则表达式的匹配结果外,还可以单独得到每个子表达式部分所匹配的结果。

要灵活运用正则表达式,必须了解其中各种元字符的功能。元字符从功能上大致分为:限定符、选择匹配符、分组组合和反向引用符、特殊字符、字符匹配符、定位符。

限定符用于指定其前面的字符或组合项连续出现多少次,下面是各种限定符及其含义:

{n} 规定前面的元素或组合项的连续出现n次

{n,} 规定前面的元素或组合项至少连续出现n次

{n,m } 规定前面的元素或组合项至少连续出现n 次,至多连续出现m 次

+ 规定前面的元素或组合项必须出现一次或连续多次,等效于 {1,}

* 规定前面的元素或组合项可以出现零次或连续多次,等效于 {0,}

? 规定前面的元素或组合项出现零次或一次,等效于 {0,1}

默认情况下,正则表达式使用最长(也叫贪婪)匹配原则。当字符“?”紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式变成使用最短(也叫非贪婪)匹配原则。例如,在字符串“fooood”中,“fo+?”只匹配“fo”部分,而“fo+”匹配“foooo”部分。

选择匹配符就是“|”字符,用于选择匹配两个选项之中的任意一个,选择匹配符的优先级低于任意字符,即“|”字符的两个选项是它两边尽可能最大的表达式。例如,“chapter|section 1”匹配的是“chapter”或“section 1”,而不是“chapter 1”或“section 1”。

分组组合符就是将正则表达式中的某一部分内容组合起来的符号,反向引用符则是用于匹配前面的分组组合所捕获到的内容。

(pattern) 将圆括号中的pattern部分组合成一个可统一操作的组合项和子匹配,每个捕获的子匹配项按照它们在正则表达式模式中从左到右出现的顺序存储在缓冲区中。缓冲区从1开始编号,最多可存储99个子匹配捕获的内容。存储在缓冲区中的子匹配捕获的内容,可以在编程语言中被检索,也可以在正则表达式中被反向引用。

\num 匹配编号为num的缓冲区所保存的内容,此处的 num 是一个标识特定缓冲区的一位或两位十进制正整数,这种方式称为子匹配的反向引用。例如,要匹配连续的5个相同的数字字符,如55555、11111等,需要使用(\d)\1{4}作为正则表达式文本,\1表示与前面的(\d)所捕获的内容一样,\1{4}则表示前面的(\d) 所捕获的内容还连续出现4次。

字符匹配符用于指定该符号部分可以匹配多个字符中的任意一个。

[…] 匹配方括号中包含的字符集中的任意一个字符,例如,“[abc]”可以与“a”、“b”、“c”三个字符中的任何一个相匹配。

[^…] 匹配方括号中未包含的任何字符,例如,“[^abc]”可以匹配“a”、“b”、“c”3个字符之外的任何字符。

[a-z] 匹配指定范围内的任何字符,例如,“[1-9]”匹配1~9之间的任何数字字符。

[^a-z] 匹配不在指定的范围内的任何字符。

\d 匹配任意一个数字字符,等效于 [0-9]。

\D 匹配任意一个非数字字符,等效于 [^0-9],为\d的逆运算。

\s 匹配任何空白字符,包括空格、制表符、换页符等,等效于[\f\n\r\t\v]。

\S 匹配任何非空白字符,为\s的逆运算,等效于 [^\f\n\r\t\v]。

\w 匹配任何英文字母和数字类字符以及下划线。等效于[A-Za-z0-9_]。

\W 匹配任何非英文字母和数字类字符,但不包括下划线。为\w的逆运算,等效于[^A-Za-z0-9_]。

. 匹配除“\n”之外的任何单个字符,例如,“(.)\1”匹配除“\n”之外的两个连续的相同字符。若要匹配包括“\n”在内的任意字符,可以使用“[\s\S]”、“[\d\D]”或“[\w\W]”等模式。若要匹配“.”字符本身,需要使用“\.”。

正则表达式中使用多种方式来表示非打印字符和原义字符,这些方式都是以反斜杠字符(\)后紧跟其他转义字符序列来表示的,其中的一些方式也可以表示普通字符。

\xn 匹配ASCII码值等于n的字符,此处的n必须是两位的十六进制数。例如,“\x41”匹配字符“A”,显然用这种方式可以表示所有非打印字符。注意:“\x041”的意义是“\x04”所表示的字符后跟字符“1”。

\un 匹配Unicode编码等于n的字符,此处的n必须是一个四位的十六进制数。例如,\u00A9 匹配版权符号(©),[\u4e00-\u9fa5]则匹配任意一个汉字字符。

定位符用于规定匹配模式在目标字符串中的出现位置。

^ 匹配目标字符串的开始位置,也就是规定匹配必须发生在目标字符串的开头处,^必须出现在正则表达式模式文本的最前面才具有定位符作用。

$ 匹配目标字符串的结尾位置,也就是规定匹配必须发生在目标字符串的结尾处,$必须出现在正则表达式模式文本的最后面才具有定位符作用。

\b 匹配一个字边界,它包含字与空格间的位置,以及目标字符串的开始和结束位置等。\B匹配非字边界。

在正则表达式中用到的一些元字符不再表示它原来的字面意义,如果要匹配这些具有特殊意义的元字符的字面意义,必须使用反斜扛(\)将它们转义为原义字符,即将反斜杠字符(\)放在它们前面。

需要进行转义的字符有“$”、“(”、“)”、“*”、“+”、“.”、“[”、“]”、“?”、“\”、“/”、“^”、“{”、“}”、“|”。

下面列举出了一些具有典型意义和用途的正则表达式模式文本:

(1)匹配空行:“^\s*$”

(2)匹配HTML标记:“<(\S+)(\s[^>]*)?>[\s\S]*<\/\1\s*>”。

(3)匹配email地址:“[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+”

(4)匹配两个相同的相邻单词:“\b([a-z]+)\1\b”

(5)匹配IP地址:“^\d{1,2}|1\d\d|2[0-4]\d|25[0-5](\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$”

【js】正则表达式(I)的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. 使用外部web组件-----easyUI、jQueryUI、Bootstrap、js正则表达式

    1.使用外部web组件,以Bootstrap为例 <head> <link rel='stylesheet'  href='bootstrap-3.3.0-dist/dist/css ...

  3. js正则表达式图形化工具-rline

    github地址:https://github.com/finance-sh/rline 在线demo: http://lihuazhai.com/demo/test.html 这是一个js正则表达式 ...

  4. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  5. JS正则表达式大全

    转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...

  6. js正则表达式replace里有变量的解决方法用到RegExp类

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...

  7. JS正则表达式验证账号、手机号、电话和邮箱

    JS正则表达式验证账号.手机号.电话和邮箱 效果体验:http://keleyi.com/keleyi/phtml/jstexiao/15.htm 验证帐号是否合法 验证规则:字母.数字.下划线组成, ...

  8. 初识JS正则表达式

    初识JS正则表达式 看到的使用的正则表达式练习:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html PS:本文参考李炎恢JS笔 ...

  9. 常用JS正则表达式

    常用JS正则表达式 收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水 ...

  10. JS正则表达式大全(整理详细且实用)

    JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...

随机推荐

  1. 单点登录(SSO)问题

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.

  2. Apache PHP Mysql 开发环境快速配置

    学习PHP开发要配置各种环境,一般会用到apache作为服务器.Mysql数据库.如何快速的配置环境成为困扰大家的烦恼,之前自己也配过,比较繁琐. 最新发现一款集成安装软件“phpStudy”.真可谓 ...

  3. C#的几种写文件方法

    C#写文件处理操作在很多的开发项目中都会涉及,那么具体的实现方法是什么呢?这里向大家介绍三大方法,希望对你在开发应用中有所启发. 首先C#写文件处理操作必须先导入命名空间:using System.I ...

  4. maven编译报错 -source 1.7 中不支持 lambda 表达式

    Maven项目编译失败: [ERROR] COMPILATION ERROR : [INFO] ---------------------------------------------------- ...

  5. JSON与XML

    XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词.我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所 ...

  6. telnet 退出命令

    telnet xxx port ctrl + ] telnet > quit ctrl + w 是清除命令 转自: http://wangyifeng.blog.51cto.com/214490 ...

  7. kettle根据参数动态派生列

    抽取数据的时候没有日期字段,需要根据抽取日期自动生成月份,如下图结构 表输入_参数部分,接收来自其他系统传过来的参数(JAVA程序或者页面),具体设置如图 在查询数据时候派生列 运行模型的时候,给参数 ...

  8. (转)Unity3d UnityEditor编辑器定制和开发插件

    在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编 ...

  9. [Javascript] Prototype, hasOwnProperty(), valueOf() and toString() methods.

    Sometime, use can rewrite the toString , valueOf method to make those function more useful: For exma ...

  10. 用Java发送HTML格式邮件测试类(支持中文)

    代码由纯Java写成,支持中文,一目了然,只要将Main函数中的相关信息填写正确就直接用了,便于修改,可以在此类基础上任意扩展成自己的类. 注意做HTML形式的邮件,最好把HTML,CSS都写全,只写 ...