转自:http://blog.csdn.net/cceevv/article/details/7765367


1.新建正则表达式,有两种方式
var exp1:RegExp = new RegExp("ABCD","g");
var exp2 = /ABCD/g;//g global 表示全局匹配

trace("ABCDEFABCD".match(exp1));
trace("ABCDEFABCD".match(exp2));//输出ABCD,ABCD,其中,字条串.match(表达式),返回一个匹配到的数组

2.元字符

1)"." 表示匹配任意单个字符(如:1,e,中,*等),可以是数字,字母,汉字,标点等特殊字符
如:
trace("this is a good Boo*".match(/.oo./g));//返回good,Boo*
但是如果匹配的正则子串本身要包含"."的话,就要用转义,如:
trace("this is a good Boo.".match(/.oo\./g));//返回Boo.

2)"^" 表示匹配字符串的起始处
(1) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/g,'中国'));//把字符串起始处的"AB"替换为"中国" 返

回:
中国AFT\nABALYN\nABOUT
输入后变成:
中国AFT
ABALYN
ABOUT

在多行匹配中,匹配方式指定为m时,从每个\n后开始匹配

(2) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/gm,'中国'));//m multiline表示多行的意思,即多行匹配
返回:
中国AFT\n中国ALYN\n中国OUT
输入后变成:
中国AFT
中国ALYN
中国OUT


注意:

trace("ABAFT\nABALYN\nABOUT".replace(/^AB/,'中国'));

trace("ABAFT\nABALYN\nABOUT".replace(/^AB/m,STHeiti; line-height:25px"> 以上两种方式匹配的结果都与(1)结果一样,所以要匹配多行时,"g"和"m"要同时使用

3)$ 表示匹配字符串结尾处,在多行匹配字符串中,匹配方式指定为m时,从每个\n前开始匹配

4)* 表示其前面的字符或表达式出现0次或多次,即任意次,次数>=0,如果0次或多次都满足的情况,取出现多次
如:/bo*/ 表示o可以出现0次或多次,bo,boo,boook,b,bk都匹配

5)+ 表示其前面的字符或表达式至少出现1次以上,即次数>=1,如果1次或多次满足的情况,取出现多次
如:/bo+/ 表示o可以出现1次以上,bo,boook都匹配,但b,bk不匹配

6)? 表示其前面的字符哎呀表达式可出现一次也可不出现,如果出现与可不出现两种都满足的情况,取出现一次
如:trace("This Book is Good Boooooook BoxBx".replace(/Bo?/g,'一'));
返回:This 一ok is Good 一ooooook 一x一x
其中Book既满足Bo,又满足B,也就是说o可出现也可不出现,取第一种情况,Bo

《关于最小匹配和最大匹配(贪婪模式和非贪婪模式)》

".*"

匹配 "内容A" "内容B" "内容C" 结果只有一个匹配结果,就是"内容A" "内容B" "内容C",

贪心模式尽可能的匹配到更长的内容,于是从第1个双引号开始直到最后一个双引号

".*?"

匹配 "内容A" "内容B" "内容C"

结果有3个匹配结果,分别是"内容A" 和 "内容B" 和 "内容C" . 非贪心模式尽可能少的匹配

7)() 表示把正则表达式的特定串组成一个组,作为一个整体
如:trace("AGoGo Is A Name AGo's Father".replace(/A(Go)*/g,'哈'));
把Go作为一个整体,即Go可出现任意次
返回:哈 Is 哈 Name 哈's Father

注意:组可以认为是正则表达式匹配模式的子模式,可以当做是一个普通的字符进行处理


(1)String.match()和RegExp.exec()捕捉了整个正则匹配的子串,同时捕捉了组匹配的子串
如:

trace("this is a good boboobooobooook".replace(/(bo+)*/,'book'));
bo+表示以b开头,o出现1次以上,然后再以组的形式出现任意多次
返回:this is a good book
/(bo+)*/ 这里相当于/(bo+)(bo+)(bo+)(bo+)/

(2)组的反向引用,即把前面定义的组引用过来,如/(bo+).*\1kie/
trace("this book is a goodbookie".replace(/(bo+).*\1kie/,'book'));
返回:this book
/(bo+).*\1kie/ 这里相当于/(bo+).*(bo+)kie/

(3)?:指定组所匹配的子串不被捕获
trace("this book is a good bookie".match(/b(o+)k./));
trace("this book is a good bookie".match(/b(?:o+)k./));
返回:
book,oo
book

(4)?=向前查找,即先匹配,再把符合某个特殊条件的取出来
如:
trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash/g,'[FLAHSH]'));
trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash(?=cs)/g,'[FLAHSH]'));

返回:
[FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]4 [FLAHSH]5
flashmx flash8 [FLAHSH]cs3 flash4 flash5

/flash(?=cs)/g是在/flash/g的基础之上加了(?=cs),
这样符合条件的有flashcs3 flashcs4 flashcs5三项,


?!向后查找,即先匹配,再把符合某个特殊条件的取出来
如:
trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash/g,'[FLAHSH]'));
trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash(?!cs[3-5])/g,'[FLAHSH]'));
返回:
[FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]cs4 [FLAHSH]cs5
[FLAHSH]mx [FLAHSH]8 flashcs3 [FLAHSH]cs4 [FLAHSH]cs5


/flash(?!cs[3-5])/g是在/flash/g基础之上加了(?!cs[3-5]),
即除了flashcs3,flashcs4,flashcs5以上的所有项

?=与?!相斥


8)[] 表示一个范围,里面的字符满足一个即可
如:/[bk]/ b,k都满足
/[a-zA-Z0-9] 26个小写字母,26个大写字母,10个数字其中任一个都满足


(1)
trace("32o498dslkfjjlkjLDSJFL70".match(/[^0-9]/g));
trace("32o498dslkfjjlkjLDSJFL7^0".match(/[^0-9]/g));
trace("32o498dslkfjjlkjLDSJFL7^0".match(/[0-9^]/g));

返回: o,d,s,l,k,f,j,L,D,S,J,F,L
o,^
3,2,4,9,8,7,^,0


如果把^放在[]字符集的开始处,表示取反的意思,如[^0-9],表示非数字,相当于\D
如果把^放在[]字符集的开始处,且被匹配的字符串含有^字符时,即表示取反的意思,又把^作为一个普

通字符来看待,这样,非数字和^都满足,如上面的第二trace()

(2)在字符集中,"." 并不是一个元字符,而是当作一个普通字符看待,相当于用"\."转义
trace('sdfdsfdfl34l3re.'.match(/[0-9.]/g));
trace('sdfdsfdfl34l3re.'.match(/[0-9\.]/g));

返回:
3,3,.
3,.

(3)在字符集中,只有"-"和"\"是被认为是转义的,
如:[0-9] 表示从0到9的任一数字
[\n\t] 表示\n换行和\t制表位

trace('ldslfasdasd\nksdjlsd\t324123424'.replace(/[\n\t]/g,'转义'));
返回:ldslfasdasd转义ksdjlsd转义324123424


9)| 表示任选一,与[]功能相似
如:/b|k/ b,k都满足
/gook|book/ gook,book都满足
trace("this is a good cook book".replace(/good|book/g,'哈'));
返回:this is a 哈 cook 哈

注意:(1)
trace("this is a good book".replace(/[gk]/g,'哈'));
trace("this is a good book".replace(/g|k/g,'哈'));

返回:this is a 哈ood boo哈
this is a 哈ood boo哈
以上两个表达式效果是一样的

但是:trace("this is a good cook book".replace(/good|book/g,'哈'));
   trace("this is a good cook book".replace(/[goodbook]/g,'哈'));

返回:this is a 哈 cook 哈
   this is a 哈哈哈哈 c哈哈哈 哈哈哈哈
以上两个表达式效果是不一样的,因为|把good和book作为一个整体,而[]把good和book
合在一起,即goodbook,也就是说只要满足g,o,k其中任意一个字符就行了


10)- 表示一个范围,与[]一起用
如:trace("lLJ62-76DS5LFd-4Jlk-中国".match(/[a-z\-]/g));
[a-z\-]其中,a-z中的"-"是一个元字符,表示从a到z的一个范围,而\-转义后表示"-"字符


3.元序列
1){n}表示在它前面的字符或表达式必须重复n次,即次数=n
如: /bo{2}/,其中o要重复2次,boo满足,boook不满足

2){n,}表示在它前面的字符或表达式必须重复n次以上,即次数>=n,如果既满足n,又满足n+1,取n+1,即取最大的
如: /bo{2,}/,其中o要重复2次以上,boo满足,boook也满足

3){n,m}表示在它前面的字符或表达式必须重复n到m次以上,即n<=次数<=m,即取最大的
如:
trace("This Book is Good Boooooook BoxBx".replace(/Bo{2,6}/g,'哈'));
返回:This 哈k is Good 哈ok BoxBx

trace("This Book is Good Boook BoxBx".replace(/Bo{2,'哈'));
返回:This 哈k is Good 哈k BoxBx

4)\d 表示匹配数字字符,即0-9
\D 表示匹配非数字字符,与\d,即除了0-9之外的字符
\w 表示匹配一个单词字符,即26个小写字母,26个大写字母,10个数字,和下划线
\W 表示匹配非单词字符,与\w反义
\s 表示匹配任意空白字符
     \S 表示匹配任意非空间字符,与\s反义


4.标记
i ignoreCase 忽略大小写
g global 全局匹配
m multiline 多行模式
s dotall 指定元字符"."是否匹配"\n",即"\n"也作为一个普通字符处理
如:
trace("this is a book\nkie".replace(/bo+k.kie/g,'哈'));
trace("this is a book\nkie".replace(/bo+k.kie/gs,'哈'));//在这里,\n被看成是一个普通字符

返回:
this is a book
kie
this is a 哈

x extend 扩展模式,在扩展模式下,正则表示式的空白字符被忽略了,如/c _ d/ 的效果相当于 /c_d/


5.正则表达式的属性
source 可得到正则表达式的匹配模式,如:trace(/\d\d/.source);输出:\d\d
lastIndex 表示正则表达式在字符串中的起始匹配位置,只有当标记为g时才起作用

6.正则表达式的方法
exec(字符串) 返回一个Object
test(字符串) 返回一个Boolean值

2012/4/20 补充:

AS3正则表达式只能匹配同一行的内容,如果匹配的内容分散到多行是匹配不到的;

所以,如果必要应该先把换行符替换掉(content = content.replace(/\n/gi,"");)

然后再做其它匹配。

AS3 正则表达式详解的更多相关文章

  1. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  3. actionscript-3 – AS3 – 仅限iOS强制横向模式?

    我已经为iOS设计了一款专为横向模式设计的游戏,它可以很好地工作,除非你将设备转为纵向模式,它停在那里,界面只填充屏幕的中间一半.如何强制应用程序仅允许两种横向模式而不是停在纵向位置.我已经尝试了所有的发布设置.为横向和自动方向设置了宽高比,如果我取消选中应用程序未旋转到其他横向模式的AU到方向,我听说这是Apple的自动拒绝.除了这个小缺陷之外,这个应用程序已准备就绪.谢谢你尽你所能的帮助.丰富

  4. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  5. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  6. swift的正则表达式(NSRegularExpression)

    init(_pattern:String){varerror:NSError?

  7. swift 正则表达式运用实例选自《swifter 100个swift开发必备tip 》

  8. 可以匹配就匹配咯: 详解 Swift 的模式匹配

    怒戳查看最终稿@SwiftGG在众多Swift提供给Objective-C程序员使用的新特性中,有个特性把自己伪装成一个无聊的老头,但是却在如何优雅滴解决“鞭尸金字塔“的问题上有着巨大的潜力。很显然我所说的这个特性就是switch语句,对于很多Objective-C程序员来说,除了用在Duff’sDevice上比较有趣之外,switch语句非常笨拙,与多个if语句相比,它几乎没有任何优势。不过Sw

  9. Swift中的模式匹配

    模式是用于匹配的规则值,如switch语句的case,do语句的catch子句,以及if、while、guard、for-in语句的条件。例如,假设你想判断一个整数是大于、小于还是等于零,你可以用if-elseif-else语句,尽管这并不美观:letx=10ifx>0{print}elseifx原文查看:http://bbs.a-coder.cn/thread-7-1-1.html

  10. 《swift2.0 官方教程中文版》 第3章-05模式

    letpoint=(3,2)switchpoint{caselet(x,y):print}//prints"Thepointisat(3,2).”/*元组模式********************************************///元组模式是逗号分隔的,有零个或多个模式的列表,并被一对圆括号括起来。枚举用例模式出现在switch语句中的case标签中,以及if,while,guard和for-in语句的case条件中。is模式和is操作符有相似表现,它们都进行类型转换,却舍弃返回的类型

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部