您的位置:首页 > 其它

一篇关于正则的学习笔记

2017-04-09 15:28 246 查看
关于正则、个人觉得难在繁琐和需要记忆的东西较多,当然复杂的除外。码上一篇一位老师教正则的笔记,留以后方便查找。

正则表达式 regular expression(有规律的 表达 )

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。

正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

用途:

正则匹配: 可以测试字符串内容是否可以与正则相匹配

替换文本: 根据模式匹配字符串中的特定内容,进行替换、删除

提取数据: 根据模式匹配从字符串中提取内容,生成数组

创建正则表达式:

1.new运算符声明:

RegExp是一个对象,和Array一样 ,正则表达式的内容作为字符串传递进去

var re = new RegExp(“a”,”i”); //这是个最简单的正则表达式,将匹配字母a, 第二个参数,表示匹配时不分大小写

2.字面量声明:

var re=/abc/g; //全文匹配abc

★注意:

正则表达式内不要出现空格(除非想匹配空格)

正则表达式中的 [ ] ( ) { } |

方括号

用于查找某个范围内的字符:

表达式 描述

[abc] 查找方括号之间的任何字符

[0-9] 匹配任何从 0 至 9 的数字

[a-z] 匹配任何从小写 a 到小写 z 的字符

[A-Z] 匹配任何从大写 A 到大写 Z 的字符

[A-z] 匹配任何从大写 A 到小写 z 的字符

★注意:

[^abc] 匹配任何 不在 方括号之间的字符

小括号 与 竖线

小括号用于分组,竖线作为间隔代表“或者”的含义

例:/(ab|cd){2}/ 匹配字符串”ab” 或者 “cd” 的2次,或者abcd 结果为:abab cdcd abcd cdab

★注意:

小括号、竖线不要放在 [ ] 内(无意义)

大括号

用于设置量词(非负整数)

量词 描述

{n} 匹配确定的 n 次

{n,} 至少匹配n 次

{n,m} 最少匹配 n 次, 最多匹配 m 次( 要求: m >= n )

三个简写量词(符号):

? 匹配零次或一次( 等价于:{0,1} )

* 匹配零次或多次( 等价于:{0,} )

* + 匹配一次或多次( 等价于:{1,} )

贪婪量词: 贪婪模式尽可能多的匹配

? * + {n} {n,m} {n,}

惰性量词: 惰性模式尽可能少的匹配

用惰性量词进行匹配时,它首先将第一个字符当成一个匹配,如果成功则退出,如果失败,则测试前两个字符,依些增加,直到遇到合适的匹配为止。贪婪量词与贪婪量词的方法正好相反. 惰性量词仅仅在贪婪量词后面加个”?”而已,如”a+”是贪婪匹配的,”a+?”则是惰性的

?? *? +? {n}? {n,m}? {n,}?

var str=”abbbbcc”;

贪婪: /[ab]+b/ 结果:abbbb

惰性: /[ab]+?b/ 结果:ab

例子:

var str = ‘aabbazbbwwbbaa’;

var arr =str.match(/.*bb/); //aabbazbbwwbb,贪婪的

var arr =str.match(/.*?bb/g); //aabb azbb wwbb 返回一个数组包含3个值,惰性的

元字符(Metacharacter)

是拥有特殊含义的字符:

元字符 描述

. 查找单个字符,除了换行和行结束符

\w 匹配字母数字和下划线( 等价于:[a-zA-Z0-9_] )

\W 匹配 除 字母数字下划线之外的字符( 等价于:[^a-zA-Z0-9_] )

\d 匹配数字 ( 等价于:[0-9] )

\D 匹配 非 数字字符( 等价于:[^0-9] )

\s 匹配一个空白字符( 等价于:[\n\r\t\f\x0B] )

\S 匹配一个 非 空白字符( 等价于:[^\n\r\t\f\x0B] )

\b 匹配单词边界

\B 匹配 非 单词边界

\0 匹配 NUL 字符

\n 匹配 换行符

\f 匹配 换页符

\r 匹配 回车符

\t 匹配 制表符

\v 匹配 垂直制表符

★注意:

元字符只能匹配一个字符,通常,元字符后面都会设置量词。

直接量字符:

\/ ———匹配 /

\ ——— 匹配 \

. ———匹配 .

* ———匹配 *

+ ———匹配 +

\? ———匹配 ?

| ———匹配 |

( ———匹配 (

) ———匹配 )

[ ———匹配 [

] ———匹配 ]

{ ———匹配 {

\ }———匹配 }

\’———匹配 单引号

\”———匹配 双引号

\xxx 查找以八进制数 xxx 规定的字符

\xdd 查找以十六进制数 dd 规定的字符

\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符

位置限制

^ 匹配任何开头为的字符串

$ 匹配任何结尾为的字符串

修饰符

修饰符 描述

i 忽略大小写

g 全文查找

m 多行查找(必须与g一起实用,并且,当使用^和$模式时才会起作用)

正则表达式 方法:

方法 描述

exec 检索字符串中指定的值。获取字符串中的第一个与正则表达式的内容,并且将匹配的内容和子匹配的结果,存放在返回数组中

例:txt=”ab aabb abab”;

re=/(ab){2}/ //(子匹配是指小括号内地内容,例如:/(ab){2}/中的(ab),结果:[abab,ab])

test 检索字符串中指定的值。返回 true 或 false。

★注意:

使用exec和test方法时,g修饰符的差异:

正则内部有个lastIndex属性,这个属性记录每一次匹配后的索引位置,该属性,在于”g”修饰符存在以下关系:

没有 g:

当没有设置g时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。

例:

var txt=”this a cat, that a dog”;

var re=/cat/;

alert(re.test(txt)); //true

console.log(re.lastIndex); //索引是0

alert(re.test(txt)); //true

有g:

找到匹配的项后lastIndex的值被设置为匹配内容的下一个字符的索引,用来标识下次执行匹配时开始查找的位置。

如果找不到匹配的项lastIndex的值会被设置为0。

例:

var txt=”this is a cat, that is a dog”;

var re=/cat/g;

alert(re.test(txt)); //true

console.log(re.lastIndex); //索引是10

alert(re.test(txt)); //false

一般情况下,使用exec和test方法,都不使用g修饰符

支持正则表达式的 String 对象的方法

方法 描述

search(搜索) 第一个与正则相匹配的字符串的索引(不执行全局匹配,它将忽略标志 g)

match(匹配) 找到一个或多个正则表达式的匹配,没有找到任何匹配的文本,返回 null,否则,返回一个数组

replace(替换) 替换与正则表达式匹配的子串

split(划分) 把字符串分割为字符串数组

字符集

[\u4e00-\u9fa5] 所有汉字

[u00-uff] 所有单字节字符

[^\x00-\xff] 匹配双字节字符(包括汉字在内)

在线 Unicode编码转换

http://tool.chinaz.com/tools/unicode.aspx

常用正则表达式:

身份证:

身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X

var reg = /^\d{15}|\d18|^\d{17}(\d|X|x)$/

Email地址:

英文或者数字下划线、减号、 英文或者数字下划线 @ -减号 点 英文或者数字下划线

var re=/\w+([-.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*/;

匹配网址URL的正则表达式:/http://([\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?/

匹配首尾空格的正则表达式:/(^\s*)|(\s*)/匹配空白行的正则表达式(可以用来删除空白行):/\n\s∗\r/匹配双字节字符(包括汉字在内):/[\x00−\xff]/只能输入汉字:/[\u4e00−\u9fa5]0,/

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线 表单验证时很实用):

re=/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则 正则表达式