关于正则、个人觉得难在繁琐和需要记忆的东西较多,当然复杂的除外。码上一篇一位老师教正则的笔记,留以后方便查找。
正则表达式 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}$/