`
昔雪似花
  • 浏览: 202126 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正则表达式

 
阅读更多
正则表达式(JS版)
1.概述
正则表达式(regular expression)是一个描述字符模式的对象。有时,正则表达式被称为“regexp”,或“RE”。

JavaScript的RegExp类表示正则表达式。

JavaScript的正则表达式完全以Perl程序设计语言的正则表达式工具为基础。

2.正则表达式的定义
在JavaScript中,正则表达式由RegExp对象表示。

(1)使用RegExp()构造函数创建RegExp对象

如:var pattern = new RegExp(“s$”);



(2)用特殊的直接量语法创建RegExp对象



像字符串直接量被定义为包含在引号内的字符一样,

正则表达式直接量也被定义为包含在一对斜杆(/)之间的字符。

如:var pattern = /s$/;

3.正则表达式的模式规范
正则表达式的模式规范是由一系列字符构成的。

大多数的字符(包括所有的字母数字字符)描述的是按照直接量进行匹配的字符。

其他的字符虽然不是按照直接量进行匹配的,但是它们具有特殊的意义。





(1) /java/ ,表示 和所有包含子串“java”的字符串相匹配。

(2) /s$/,包含两个字符;

第一字符“s”按照直接量与自身相匹配,

第二个字符“$”是一个特殊元字符,它所匹配的是字符串的结尾。

所以,该正则表达式匹配的就是以字母“s”结尾的字符串。

3.1. 直接量字符
在正则表达式中,所有的字母字符和数字都是按照直接量与自身相匹配的。

JavaScript的正则表达式语法还通过以反斜杆(\)开头的转义序列,支持某些非字母的字符。



表1:正则表达式的直接量字符



字符
匹配

字母数字字符
自身

\o
NUL字符(\u0000)

\t
制表符(\u0009)

\n
换行符(\u000A)

\v
垂直制表符(\u000B)

\f
换页符(\u000C)

\r
回车(\u000D)

\xnn
由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n

\uxxxx
由十六进制xxxx指定的Unicode字符,例如,\u0009等价于\t

\cX
控制字符^X。例如,\cJ等价于换行符\n




在正则表达式中,很多标点符号具有特殊的含义。它们是:

^  $  .  *  +  ?  =  !  :  |   \   /  (  )  [  ]  {  }

在正则表达式中按照直接量使用这些标点符号,就必须用反斜杆(\)进行转义;

如:正则表达式“/\\/”与任何包含反斜杆的字符串匹配


类别:正则 | 浏览()  网友评论:1 3.2. 字符类
? 将单独的直接量字符放进方括号内就可以组合成字符类(character class)。一个字符类和它所包含的任何字符都匹配。
如 /[abc]/ ,和字母“a”,“b”,“c”中的任何一个字母都匹配。

? 否定字符类,匹配的是不包含在方括号之内的所有字符。
定义否定字符类,将一个^符号作为左方括号后的第一个字符。
正则表达式/ [^abc]/,匹配的是“a”,“b”,“c”之外的所有字符。

? 字符类可以使用连字符来表示一个字符范围。
/[ a-z]/ 匹配拉丁字母集中的任何小写字符,
/[ a-zA-Z0-9]/ 匹配拉丁字母集中任何字母数字字符。

表2:正则表达式的字符类

字符 匹配
[…] 位于括号之内的任意字符
[^…] 不在括号之中的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII单字字符,等价于[a-zA-Z0-9_ ],包含下划线
\W 任何ASCII非单字字符,等价于[^a-zA-Z0-9_ ]
\s 任何Unicode空白符
\S 任何非Unicode空白符,注意 \w 和 \S不同
\d 任何ASCII数字,等价于[0-9]
\D 除了ASCII数字之外的任何字符,等价于[^0-9]
[\b] 退格直接量(特例)

注意1:
在方括号之内也可以使用这些特殊的字符类转义序列。 2 3.3. 重复
(1)把两位数描述成 /\d\d/ ,把四位数描述成 /\d\d\d\d/ ,需要有一种方法可以用来描述具有任意多数位的数字。
(2)想描述一个字符串,这个字符串由三个字母以及跟随在字母之后的一位数字构成。

这些较复杂的模式使用的正则表达式语法都指定了该正则表达式中的一个元素重复出现的次数。
指定重复的字符总是出现在它们所作用的模式之后。
由于某种重复类型相当常用,所以就有一些特殊的字符专门用于表示这种情况。如 ?, + , *

表3:正则表达式的重复字符

字符 含义
{n,m} 匹配前一项至少n次,但是不能超过m次
{n,} 匹配前一项n次,或更多次
{n} 匹配前一项恰好n次
? 匹配前一项0次或1次,也即前一项是可选。等价于{0,1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次,等价于{0,}

注意:
使用重复字符 ? 和 * 时,由于这些字符可能匹配前面字符的0个实例,所以它们允许什么都不匹配。
如:正则表达式 /a*/ 实际上与字符串 “bbbb”匹配,因为这个字符串含有0个a.。

3.3.1. 非贪婪重复
表3中列出的重复字符可以匹配尽可能多的字符。我们说,这种重复是“贪婪的”。

可以以非贪婪的方式进行重复,只需要在重复字符后 3 3.4. 选择、分组和引用


正则表达式的语法,还包括指定选择项、对子表达式分组和引用前一子表达式的特殊字符。



3.4.1. 竖线“|”作选择
字符“|”用于分隔供选择的字符。

如:

/ab|cd|ef/ 匹配的是字符串“ab”,或字符串“cd”,或字符串“ef”

/\d{3}|[a-z]{4}/ 匹配的是三位数字或四个小写字母



注意:

选择项从左到右考虑,直到发现了匹配项。

如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。

如:

/a|ab/ 应用到字符串“ab”上时,它只匹配第一字符。

4 3.4.2. 括号“( )”作分组
? 正则表达式中,括号的作用,把单独的项目组合成子表达式,以便可以像处理一个独立的单元那样用 | 、* 、+ 、? 等来处理它们。

如:

/java(script)?/ 匹配的是字符串“java”,其后既可以有“script”,也可以没有。



/(ab|cd)+|ef/ 匹配的,既可以是字符串“ef”,也可以字符串“ab”或者“cd”的一次或多次重复。



? 括号的另一个作用,在完整的模式中定义子模式。

当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配的部分。



如:

/[a-z]+\d+/ ,一个或多个小写字母后面跟随了一位或多位数字

假定,我们真正关心的是每个匹配尾部的数字,那么将模式的数字部分放在括号中

/[a-z]+(\d+)/ ,这样就可以从检索到的任何匹配中抽取数字了。



3.4.3. 反斜杆带数字“\n”作引用
带括号的子表达式的另一个用途是,允许我们在同一正则表达式的后面引用前面的子表达式。

通过在字符“\”后加一位或多位数字实现的。数字指定了带括号的子表达式在正则表达式中的位置。

如:

\1 引用的是第一带括号的子表达式,

\3 引用的是第 5 3.4.4. “(?: )”只组合,只分组,不生成引用
在JavaScript1.5(不是JavaScript1.2)中,无须创建带编码的引用就可以将正则表达式中的项目进行组合。它不是以 ( 和 ) 对项目进行分组,而是以 (?: 和 ) 来分组。

如:
/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/
这里,子表达式 (?:[Ss]cript) 仅仅用于分组,并不生成引用,因此,现在,对于\2实际上引用的是与(fun\w*)匹配的文本。

表4:正则表达式的选择、分组和引用字符

字符 含义
...|... 选择。匹配的是该符号左边的子表达式或右边的子表达式
(...) 组合。将几个项目组合为一个单元,这个单元可由*、 +、 ? 和 |等符号使用,而且还可以记住和这个组合匹配的字符,以供此后的引用使用
(?:...) 只组合。把项目组合到一个单元,但是不记忆与该组匹配的字符
\n 和第n个分组第一次匹配的字符相匹配。
组是括号中的子表达式(可能是嵌套的)。
组号是从左到右计数的左括号数,以 (?: 形式分组的组不编码

6 3.5. 指定匹配的位置
表5:正则表达式的锚字符

^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个词语的边界。简而言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或结尾之间的位置(匹配一个字边界,即字与空格间的位置)
(注意,[\b]匹配的是退格符)
\B 匹配非词语边界的字符
(?=p) 正前向声明,要求接下来的字符都与模式p匹配,但是,匹配结果中,不包括匹配中的那些字符
(?!p) 反前向声明,要求接下来的字符不与模式p匹配
例子:
? /\bJava\b/
匹配 Java 、’ Java ’ (前后带空格) 不匹配:JavaScript

? /\B[Ss]cript/
匹配:JavaScript 、 postscript 不匹配:script 、Scripting

? /[Jj]ava([Ss]cript)?(?=\:)/
匹配: JavaScript: The Definitive Guide
不匹配:Java in a Nutshell

? /Java(?!Script)([A-Z]\w*)/
匹配:JavaBeans、 Javanese 不匹配:JavaScript
7 3.6. 标志
表5:正则表达式的标志



字符
含义

i
执行大小写不敏感的匹配

g
执行一个全局匹配。简而言之,即找到所有匹配,而不是在找到第一个之后就停止

m
多行模式,

^ 匹配一行的开头和字符串的开头

$ 匹配一行的结尾或字符串的结尾




4. 用于模式匹配的String方法
本节讨论String对象的部分方法,它们在正则表达式中执行模式匹配和检索与替换操作。

类String支持四种利用正则表达式的方法。





方法
用途

search (regexp)
在字符串中检索与regexp相匹配的子串,并且返回第一匹配子串的第一个字符的位置。

如果没有找到任何匹配的子串,则返回 -1

replace(regexp, replacement)
查找并替换。在字符串中查找与regexp相匹配的子串,然后用replacement替换这些子串。

如果regexp具有全局性质g,那么将替换所有的匹配子串。否则,只替换第一个匹配子串。

match(regexp)
检索字符串,以找到一个或多个与regexp匹配的文本。

如果没有找到任何匹配的文本,将返回null。

否则,返回一个数组。(是否具有性质g,返回的数组大不一样,请查看帮助文档)

split(regexp, limit)
将字符 8 5. 用于模式匹配的RegExp对象
JavaScript中,正则表达式是用RegExp对象来表示的。

除了构造函数RegExp()之外,RegExp对象还支持3种方法和大量的属性。

5.1. RegExp的构造函数
new RegExp(pattern, attributes)

参数
含义

pattern
一个字符串,指定正则表达式的模式或其他正则表达式

attributes
一个可选的字符串,包含属性“g”、“i”和“m”,

如果pattern是正则表达式,而不是字符串,则必须省略该参数。




l 第一个参数是包含正则表达式主体的字符串,即正则表达式直接量中出现在斜线对之间的文本。

l 因此,将正则表达式作为字符串直接量传递给RegExp()时,必须用\\替换所有\字符



如:

//找到字符串中的5个数字。

var zipcode = new RegExp(“\\d{5}”, ”g”);

9 5.2. RegExp的实例属性
属性 含义 返回值
global RegExp对象是否具有性质g 只读的布尔值
ignoreCase RegExp对象是否具有性质i 只读的布尔值
lastIndex 上次匹配后的字符位置,用于在一个字符串中进行多次匹配
由方法 exec()和test()使用 可读写的整数
multiline RegExp对象是否具有m性质 只读的布尔值
source 正则表达式的源文本 只读的字符串

5.3. 用于模式匹配的RegExp方法
方法 用途
exec(text) 对指定的字符串,执行一个正则表达式,
也即,在一个字符串中,检索匹配。
如果没有找到任何匹配的子串,则返回 null;
如果找到了一个匹配,则返回一个数组;
test(text) 检测一个字符串是否匹配某个模式
如果字符串中含有匹配的文本,就返回true ,否则,返回 false

如:
var pattern = /java/i;
pattern.test(“JavaScript”); //返回true

var pattern = /Java/g;
var text = “JavaScript is more fun than Java!”;
var result;
while ( ( result = pattern.exec(text) ) != null )
{
alert(“Matched ‘” + result[0] + “’” + “ at position “ + result.index
+ “; next search begins at “ + pattern.lastIndex)
}
10 6. 常见正则表达式

^[+-]?\d+$ 整数
^[0-9]*[1-9][0-9]*$ 正整数 (没有+号)
^-[0-9]*[1-9][0-9]*$ 负整数
^\d+$ 正整数 + 0(非负整数)
^((-\d+)|(0+))$ 负整数 + 0(非正整数)
^[a-zA-Z]+$ 由26个英文字母组成的字符串
^[a-zA-Z0-9]+$ 由数字和26个英文字母组成的字符串
^\w+$ 由数字、26个英文字母或者下划线组成的字符串
(^\s+)|(\s+$) 首尾空格
[\u4e00-\u9fa5] 匹配中文字符(Unicode编码),包括简体、繁体中文
^([0-9]){8}([a-zA-Z]){2}$ 前8位数字,后2位字母
^[\w.]+@[\w]+(\.[\w]{2,3}){1,2}$ email地址
(\w+):\/\/([\w.]+)\/(\S*) URL
14:58 | 添加评论 | 发送消息 | 固定链接 | 引用通告 (0) | 写入博客 | 技术
Java中的17种常用正则表达式归纳
      01、"^\\d+$"  //非负整数(正整数 + 0)
  02、"^[0-9]*[1-9][0-9]*$"  //正整数
  03、"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0)
  04、"^-[0-9]*[1-9][0-9]*$"  //负整数
  05、"^-?\\d+$"    //整数
  06、"^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0)
  07、"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
  08、"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0)
  09、"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
  10、"^(-?\\d+)(\\.\\d+)?$"  //浮点数
  11、"^[A-Za-z]+$"  //由26个英文字母组成的字符串
  12、"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
  13、"^[a-z]+$"  //由26个英文字母的小写组成的字符串
  14、"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
  15、"^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串
  16、"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
  17、"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url
分享到:
评论

相关推荐

    常用java正则表达式

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    正则表达式验证工具,正则表达式校验工具

    正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...

    学习正则表达式-Michael+Fitzgerald.pdf

    《学习正则表达式》从正则表达式的基本概念讲起,到编写完整的sed和Perl脚本,再到转换HTML文件,将这种强大的工具解释得清晰透彻。...《学习正则表达式》适合对正则表达式感兴趣的程序员和互联网从业者。

    Delphi 10.4 最新版正则表达式(TRegExpr)源码

    Delphi平台下非常好用的正则表达式控件源码。TRegExpr库实现正则表达式。 正则表达式易于使用,功能强大,可用于复杂的搜索和替换以及基于模板的文本检查。这对于输入形式的用户输入验证特别有用-验证电子邮件地址等...

    《学习正则表达式》高清扫描版 PDF

    正物色一本学习正则表达式的入门图书?恭喜,《学习正则表达式》非常适合你!本书提供大量经典简洁的示例,从零开始教你逐步掌握正则表达式。通过匹配特定单词、字符和模式,读者很快就可以自己动手使用正则表达式...

    正则表达式验证正则表达式验证

    正则表达式正则表达式正则表达式正则表达式 验证程序

    正则表达式经典实例

    《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报...

    wps表格excel正则工具,excel正则表达式替换/匹配/查找/搜索/提取数字

    让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel 正则工具」顾名思义,需要使用 “正则表达式(PCRE)” 的知识来进行操作,对于完全没有接触过正则的朋友也许有一定的入门门槛,但正则实在是太过强大...

    csharp正则表达式参考手册

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用...

    正则表达式整理汇总(参考学习)

    正则表达式整理汇总,含以下内容 [1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在...

    常用正则表达式 正则表达式

    常用正则表达式 正则表达式 常用正则表达式 正则表达式

    java正则表达式.zip

    java,正则表达式,详解,java正则表达式,PDF

    正则表达式大全 - 收集的最常用正则表达式

    常用正则表达式大全: 匹配中文字符的正则表达式 匹配空白行的正则表达式 匹配HTML标记的正则表达式 匹配Email地址的正则表达式 匹配网址URL的正则表达式 匹配国内电话号 匹配中国邮政编码 匹配身份证 匹配ip地址 ...

    ASP.NET 中的正则表达式

    Microsoft®.NET Framework 对正则表达式的支持是一流的,甚至在 Microsoft® ASP.NET 中也有依赖正则表达式语言的控件。本文介绍了深入学习正则表达式的基础知识和推荐内容。 本文主要面向对正则表达式知之甚少或...

    精通正则表达式(第3版)(含awz3 mobi epub)

    随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...

    Java正则表达式 Java 正则表达式

    Java正则表达式Java正则表达式Java正则表达式Java正则表达式

    正则表达式(日期校验)

    正则表达式日期校验 正则表达式日期校验 正则表达式日期校验

    正则表达式入门经典.[美]Andrew Watt(带详细书签)

    《正则表达式入门经典》详细解释了正则表达式的各个组成部分、这些组成部分的含义、如何使用它们,以及在编写正则表达式时如何避免常见的错误。正则表达式能够帮助用户和开发人员更加有效地查找和操纵文本内容。而且...

    C语言正则表达式库

    C语言正则表达式库,兼容perl的正则表达式库,使用简介、方便

    正则表达式教程和配套测试工具regextester

    非常棒的正则表达式速成教程,号称30分钟叫你学会正则表达式常用用法。我本人学了一下,感觉不赖,不过俺比较笨,30分钟的东西学了3个多小时,已经从什么都不会变成会编各种复杂的正则筛选条件了^^!这个教程是配合...

Global site tag (gtag.js) - Google Analytics