您的位置:首页 > Web前端 > JavaScript

JavaScript 1.10 RegExp类型—正则表达式的使用方法(部分转载)

2017-04-25 00:17 555 查看

JavaScript 1.10 RegExp类型—正则表达式的使用方法(部分转载)

 

1.RegExp类型是一种引用变量类型。也称为正则表达式。

但RegExp类型不是确定的数值,而是一种描述,按照这种描述,可以找出字符串中的一个或几个字符。

 

2.声明和使用:

1)构造函数 var reg = new RegExp("pattern", "attributes");  //必加引号

2)字面量 var reg=/pattern/attributes;    //推荐使用,不加引号
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

参数 attributes 是一个可选的字符串,包含属性"g"、"i"和"m"

i
执行对大小写不敏感的匹配。

g
执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

    m    
执行多行匹配。如果没有设置这个属性,那么元字符^与$只能与整个被搜索字符串的开始/结束位置匹配。

若设置这个属性,可以与被搜索字符串的"\n"或"\r"之后的位置相匹配。ECMAScript标准化之前,不支持m属性。

注:在html中的文本,只要没有<br />的都是一行。即使在编辑器中显示两行,也是一行;按了回车键,也就是一个空格罢了。

???“如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。”什么意思?说的是i
g m还是m?

范例:

var reg=/abc/;    

var reg = /[abc]/;

var reg = new RegExp("abc", "g");

var reg = new RegExp("[abc]", "g");

 

3.转义

当要找的字符组合中有下列元字符时,必须进行转义。

( ) [ ] { } \ ^ $ | . ? + *

例如1:要找“[bc]at”,写法:var reg = /\[bc\]at/;

例如2:要找“\hello\123”,写法:var reg = /\\hello\\123/;

在用构造函数时,因为参数是字符串,还必须再次对\进行转义。

例如1:要找“[bc]at”,写法:var reg = new RegExp("\\[bc\\]at");

例如2:要找“\hello\123”,写法:var reg = new RegExp("\\\\hello\\\\123");

 

4.正则表达式详解

一.匹配确定值,只要含有正则中的内容即可。

var reg=/a/;      //只能匹配字符a

var reg=/abc/;    //只能匹配字符组合abc

 

二.匹配单个字符

1)字符类:匹配[]中的任何一位字符

var reg = /[abc]/;  //匹配字符a或b或c

 

2)反向类:在字符类中括号内部最开始写一个^,表示反向

var reg = /[^abc]/;  //匹配除了abc以外的任意字符

 

3)范围类:

var reg = /[a-t]/;  //匹配到a到t之间的任意一个字符

var reg = /[a-z]/;  //匹配所有的小写字母

var reg = /[A-Z]/;  //匹配所有的大写字母

var reg = /[0-9]/;  //匹配所有的数字

 

4)组合类

var reg = /[0-9a-z]/;

var reg = /[A-Z0-9a-z]/;

5)元字符类

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

\w
查找单词字符,(所有的字母数字和_)

\W
查找非单词字符,[^a-zA-Z0-9_] 非单词字符

\d
查找数字。

\D
查找非数字字符。

\s
查找空白字符。

\S
查找非空白字符。

\b
匹配单词边界。既不是空白符,也不是字母,是空白符与字母中间的边界。

\B
匹配非单词边界。

\0
查找 NUL 字符。

\n
查找换行符。

\f
查找换页符。

\r
查找回车符。

\t
查找制表符。

\v
查找垂直制表符。

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

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

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

6)补充

或者| 
括号 () 提升优先级,先计算

var reg = /abc|bcd/;

var reg = /a|b|c|d/;  //如果使用单个字符,与后面的作用相同 [abcd]

三.匹配多个字符的组合

只有在[]里和|,字符间才是选择的意思,/ab+c$/中表示a连接多个b连接c并以c结尾。

1) ^
匹配字符串的开始,$
匹配字符串的结束

^ 在中括号外使用,写在正则最前面时,表示匹配开头,一个正则中只能使用一次

var reg = /^abc/;

console.log(reg.test("abcdefg")); //true

console.log(reg.test("aabcdefg"));//false

$ 写在正则最后位置,表示以xxx结束

var reg = /abc$/;

console.log(reg.test("ddddabc"));//true

console.log(reg.test("ddddaabbc"));//false

^和$同时使用 严格匹配-必须跟书写的正则内容完全相同

var reg = /^abc$/;

console.log(reg.test("abc"));//true

console.log(reg.test("abcabc"));//false

 

2)量词类

n+
匹配≥1个n的组合

例如,/a+/ 匹配"candy"中的"a","caaandy"中所有的"aaa"。

n默认为字符,
若想n为字符
串,加(),
例如/(ab)+/
可以匹配
"ab"或"abab"。
否则,/ab+/
匹配"ab"
或"abbb"
n*
匹配≥0个n的组合

例如,/bo*/ 匹配"boooed"中的"booo","bird
warbled"中的"b",但是不匹配"aaaaa aa"。

n?
匹配0个或1个n

例如,/e?be?/ 匹配"b"或"eb"或"be"或"ebe"

n{X}
匹配X个
n的组合

例如,/a{2}/ 不匹配"candy,"中的"a",但是匹配"caandy,"中的两个"a",且匹配"caaandy."中的前两个"a"。

n{X,}
匹配≥X个
n的组合

例如,/a{2,}/ 不匹配"candy"中的"a",但是匹配"caandy"和"caaaaaaandy."中所有的"a"。

    n{X,Y}    
匹配≥X且≤Y个n的组合

例如,/a{1,3}/ 不匹配"cndy",匹配"candy,"中的"a","caandy,"中的两个"a",匹配"caaaaaaandy"中的前面三个"a"。

注意,当匹配 "caaaaaaandy"时,即使原始字符串拥有更多的"a",匹配项也是"aaa"。

n$
匹配任何结尾为 n的n

^n
匹配任何开头为 n的n

?=n
匹配任何其后紧接指定字符串
n 的字符串。

例如:/is(?= all)/ 匹配的是"Is this all there is",要对?=n加括号,且all前有空格

n默认为字符
串,不用加()
?!n
匹配任何其后没有紧接指定字符串
n 的字符串。

例如:/is(?! all)/gi 匹配的是"Is t
1308d
his all thereis",要对?!n加括号,且all前有空格

5.以下是收集于网络中的常用正则表达式:

注:正则表达式中的子表达式,捕获,反向引用。

子表达式:正则表达式中每一个()就是一个子表达式

捕获:js会将各个子表达式的内容捕获到内存暂存

反向引用:引用的是子表达式的内容,用\n,引用第n个左括号的内容。

例如:

/*查找类似于 12321-333999111
这样的号码,要求满足前面是一个五位数,然后是

一个-号,然后是一个九位数,连续的每三位要相同。下面
4 种方法都是可以的*/

var myReg2=/(\d){5}-(\d)\2\2(\d)\3\3(\d)\4\4/gi;

var myReg2=/(\d){5}(-)(\d)\3\3(\d)\4\4(\d)\5\5/gi;

var myReg2=/(\d){5}(-)((\d)\4\4){3}/gi;  

var myReg2=/(\d){5}-((\d)\3\3){3}/gi; 

 /*注意:这里不是((\d)\2\2){3},反向捕获是以左括号为标志的,前面有几个左括号,那么就反向捕获第几个子表达式的内容*/

一、校验数字的表达式

1 数字:^[0-9]*$

2 n位的数字:^\d{n}$

3 至少n位的数字:^\d{n,}$

4 m-n位的数字:^\d{m,n}$

5 零和非零开头的数字:^(0|[1-9][0-9]*)$

6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$

8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

11 非零的正整数:^[1-9]\d*$或^([1-9][0-9]*){1,3}$或^\+?[1-9][0-9]*$

12 非零的负整数:^\-[1-9][]0-9"*$或^-[1-9]\d*$

13 非负整数:^\d+$或^[1-9]\d*|0$

14 非正整数:^-[1-9]\d*|0$或^((-\d+)|(0+))$

15 非负浮点数:^\d+(\.\d+)?$或^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$或^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$或^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$或^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

19 浮点数:^(-?\d+)(\.\d+)?$或^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

二、校验字符的表达式

1 汉字:^[\u4e00-\u9fa5]{0,}$

2 英文和数字:^[A-Za-z0-9]+$或^[A-Za-z0-9]{4,40}$

3 长度为3-20的所有字符:^.{3,20}$

4 由26个英文字母组成的字符串:^[A-Za-z]+$

5 由26个大写英文字母组成的字符串:^[A-Z]+$

6 由26个小写英文字母组成的字符串:^[a-z]+$

7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

8 由数字、26个英文字母或者下划线组成的字符串:^\w+$或^\w{3,20}$

9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$或^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+

12 禁止输入含有~的字符:[^~\x22]+

三、特殊需求表达式

1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3 InternetURL:[a-zA-z]+://[^\s]*或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

7 身份证号(15位、18位数字):^\d{15}|\d{18}$

8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$或^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

12 日期格式:^\d{4}-\d{1,2}-\d{1,2}

13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

15 钱的输入格式:

16 1.有四种钱的表示形式我们可以接受:"10000.00"和"10,000.00",和没有"分"的"10000"和"10,000":^[1-9][0-9]*$

17 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

18 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

19 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

20 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是"10"和"10.2"是通过的:^[0-9]+(.[0-9]{2})?$

21 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

22 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

24 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

26 中文字符的正则表达式:[\u4e00-\u9fa5]

27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

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

29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

30 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)

34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

1 . 校验密码强度
密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2. 校验中文

字符串仅能是中文。

^[\\u4e00-\\u9fa5]{0,}$

3. 由数字、26个英文字母或下划线组成的字符串

^\\w+$

4. 校验E-Mail地址
同密码一样,下面是E-mail地址合规性的正则检查语句。

[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?

5. 校验身份证号码
下面是身份证号码的正则校验。15
或 18位。

15位:

^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$

18位:

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

6. 校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7. 校验金额
金额校验,精确到2位小数。

^[0-9]+(.[0-9]{2})?$

8. 校验手机号
下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$

9. 判断IE的版本

IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。

^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$

10. 校验IP-v4地址

IP4 正则语句。

\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

11. 校验IP-v6地址

IP6 正则语句。

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12. 检查URL的前缀
应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。

if (!s.match(/^[a-zA-Z]+:\\/\\//))

{

s = 'http://' + s;

}

13. 提取URL链接
下面的这个表达式可以筛选出一段文本中的URL。

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

14. 文件路径及扩展名校验
验证windows下文件路径和扩展名(下面的例子中为.txt文件)

^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$

15. 提取Color Hex Codes

有时需要抽取网页中的颜色代码,可以使用下面的表达式。

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

16. 提取网页图片

假若你想提取网页中所有图片信息,可以利用下面的表达式。

\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

17. 提取页面超链接
提取html中的超链接。

(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>

18. 查找CSS属性
通过下面的表达式,可以搜索到相匹配的CSS属性。

^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}

19. 抽取注释
如果你需要移除HMTL中的注释,可以使用如下的表达式。

<!--(.*?)-->

20. 匹配HTML标签
通过下面的表达式可以匹配出HTML中的标签属性。

<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)\\/?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: