正则

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

测试字符串的某个模式。例如,可以测试字符串是否存在一个电话号码模式或email格式。这称为数据有效性验证 

替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字 

根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字 

-------------------------------------------------------------------------------------
正则表达式语法 

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

该模式描述在查找文字主体时待匹配的一个或多个字符串。

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

创建正则表达式 

var re = new RegExp();    //RegExp是一个对象,和Array一样 ,但这样没有任何效果,需要将正则表达式的内容作为字符串传递进去  

re =new RegExp("a");//最简单的正则表达式,将匹配字母a  

re=new RegExp("a","i");//第二个参数,表示匹配时不分大小写  


---------------------------------------------------------------------
方括号

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

表达式    描述

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

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

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

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

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

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

--------------------------------------------------------------------
小括号

用于匹配分组

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


---------------------------------------------------------------------

元字符(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 字符


注意:

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

-------------------------------------------------------------------
量词

量词  描述 

*    匹配零次或多次    例如,zo* 能匹配 "z" 以及 "zoo"。    * 等价于{0,}。 

+    匹配一次或多次    例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。    +等价于 {1,}。 

?    匹配零次或一次    例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 

{n}    匹配确定的 n 次, n 为非负整数。   例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
 
{n,}  n 是一个非负整数。至少匹配n 次。      例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如: "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 


---------------------------------------------------------------------------
位置限制

^     匹配任何开头为的字符串   例如 ,^n  匹配任何开头为 n 的字符串

$     匹配任何结尾为的字符串  例如 ,n$  匹配任何结尾为 n 的字符串


--------------------------------------------------------------------------------------------------

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

?  *  +  {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个值,惰性的

---------------------------------------------------------------------------
方法

方法    描述    

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

例:txt="ab aabb abab";

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


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

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

方法    描述
    
search    检索与正则表达式相匹配的值,返回第一个与正则相匹配的子串的索引值

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

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

split    把字符串分割为字符串数组


--------------------------------------------------------------------------
修饰符

修饰符    描述
i    忽略大小写

g    全文查找(全局匹配) 

m    多行查找

在全局匹配模式下可以对指定要查找的字符串执行多次匹配。

正则内部有个lastIndex属性,

没有 g:

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


有g:

找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的索引

用来标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。

例:

var txt="this a cat,this a dog";

var re=/cat/g;

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

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

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


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

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

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


---------------------------------------------------------------------------

正则表达式的() [] {}有不同的意思。

() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。


-------------------------------------------------------------------------
字符集

[\u4e00-\u9fa5]  所有汉字

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

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


在线 Unicode编码转换

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


\u706b\u661f\u65f6\u4ee3  火星时代


----------------------------------------------------------------------------

常用正则表达式:


身份证:

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

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


Email地址:

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

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


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

匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/>

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

匹配空白行的正则表达式(可以用来删除空白行):\n\s*\r

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

只能输入汉字:/^[\u4e00-\u9fa5]{0,}$/


匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线 表单验证时很实用):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值