正则表达式

正则表达式

正则表达式的web开发中的常见场合

1: 邮箱验证

2:用户名验证

3:替换字符串某一部分

4:信息采集,用来分析有效的代码段

.....

.....

 

正则表达式 规则表达式

"一种有规律的字符串的描述"

 

正则表达式是一门独立的知识,同样的一段描述,比如,对于email的匹配表达式,

在不同语言是一样的但是,调用的函数可能不一样.

 

 

学习正则表达式

1: js,如果写一个正则表达式, "/正则表达式/" (不含双引号)

2: js,用正则表达来验证字符串是否满足可以用  reg.test(String); // 验证

3:  js, 用正则表达式的.exec函数用来查找匹配的选项,并把查到的值取出. // 查找

4: 字符串应用正则

string.match(reg), 正则查找字符串

string.search(reg), 正则查找位置

string.replace(reg,'newstr');正则替换

String.split(reg); 正则拆分

 

 

 

正则表达式3句话

1:要找什么字符?

2:从哪儿找?

3:找几个?

 

 

1.要找什么字符?

1.1 字面值,"hi", 就是找"hi"

1.2 字符集合来表示,[abcd], 指匹配abcd中的任意一个

1.3 用范围来表示字符 [0-9],[a-z] [A-Z]

1.4 字符"" (就是系统为常用的字符集合创建的一个简写)

 例: \d ----> [0-9], \w--->[0-9a-zA-Z_], \s ------->[ \t\v\f\r\n](空白符)

1.5 补集的形式来表示字符集合

:[0-9]===>[^0-9],  [abcef]===>[^abcef]

对于字符簇,只需把字母大写,即可表示补集

[\d] ==== >[\D],  [\w]===>[\W],[\s]==>[\S](非空白字符)

1.6 " ", 代表"任意字符,不包括换行符"

 

 

 

2:从哪儿找,找到哪儿?

2.1 \b, ====>'单词边界'

\bhi ===>从单词的边界开始匹配,hi

 

2.2 \B ===> 单词的非边界把单词中间的某一部分取出来

把中间含有 hi的单词取出hi不能在两端

 

2.3 ^ caret, "字符串的起始位置开始匹配",

2.4 $ ,匹配到字符串的结束位置 

 

 

3: 找多少

* :  0--->N  ===> 等价 {0,}

+: [1,N] ====>等价  {1,}

?: [0,1]  ====>等价   {0,1}

a{n} : 字符a准确的出现n

a{n,}: 字符a至少出现次

a{n,m}, n-->m次 

 

 

个数修饰符默认是贪婪模式,尽量多找

"个数修饰符后面加?",则为非贪婪模式尽量少的找.

 


模式:

以匹配为例,默认情况,match找到一次就结束,

能否 告诉匹配过程一直找,在全文范围内一直找.

g ->全局模式 ,global  [找所有的,而不是找一次结束]

i---> 忽略大小写 ignore 

m->多行模式

s-->单行模式(把整个字符串看成一行) (js不支持单行模式)

js,不支持单行的情况下,如何换行?

--->什么样的模式能代表"所有"字符串

==> [\d\D], [\s\S],[\w\W]

 

预先判断是否为指定值

 

正向预查

C

O

M

I

N

g

灰色:是查找的值

 

预先判断是否不为指定值

 

负向预查

C

O

M

I

N

g

灰色:是查找的值

 

 

 

向前正向预查:

U

n

L

U

C

ky

Js不支持向前正向预查(零宽度正回顾后发断言)


反向引用/后向引用

 

子表达式

Exec为例:

匹配到的数组0个单元代表 "整个正则表达式的匹配结果"

1

2

3

...

N   , 则代表第 N个子表达式的匹配结果

 

如何引用子表达式所匹配的结果?

:

在表达式内部,反向引用时, \n来匹配第N个子表达式的结果

子表达式的当成变量传递时,$N来匹配 第N个子表达式的匹配结果

 

 

全角空格的unicode编码   \u3000

 

 

posted @ 2013-08-05 11:14  为了这有限的生命  阅读(259)  评论(0编辑  收藏  举报