javascript中的正则表达式

一:提要

正则表达式用处普遍,操纵轻易,实行效率高,是进修javascript必需控制的部份。本章节主要讲正则表达式中的一些划定规矩和几个用法,为下一章节的表单考证打下基本。关于正则表达式的细致内容,能够参考《正则表达式必知必会》或许百度搜刮。

二:正则表达式的划定规矩

1.誊写情势:

(1)var expression=/pattern/flag;

 比方:var pattern=/abc/g,全局婚配'abc'字符串

(2)var expression=new RegExp(‘pattern/flag’);

 比方:var pattern=new RegExp('pattern/flag'),全局婚配'abc'字符串

2.flag申明:

/i (疏忽大小写,如查找字符串'abc',一样能婚配到'ABC')
/g (全文查找涌现的一切婚配字符,不加/g只婚配查找到的第一个字符串)
/m (多行查找)
/gi(全文查找、疏忽大小写)
/ig(全文查找、疏忽大小写)

3.parten申明

字符 形貌

\    将下一个字符标记为一个特别字符、或一个原义字符、或一个向后援用、或一个八进制转义符。比方,“n”婚配字符“n”。“\n”婚配一个换行符。串行“\\”婚配“\”而“\(”则婚配“(”。
^    婚配输入字符串的最先位置。假如设置了RegExp对象的Multiline属性,^也婚配“\n”或“\r”今后的位置。
$    婚配输入字符串的完毕位置。假如设置了RegExp对象的Multiline属性,$也婚配“\n”或“\r”之前的位置。
*    婚配前面的子表达式零次或屡次。比方,zo*能婚配“z”以及“zoo”。*等价于{0,}。
+    婚配前面的子表达式一次或屡次。比方,“zo+”能婚配“zo”以及“zoo”,但不能婚配“z”。+等价于{1,}。
?    婚配前面的子表达式零次或一次。比方,“do(es)?”能够婚配“does”或“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,m})背面时,婚配形式黑白贪欲的。非贪欲形式尽量少的婚配所搜刮的字符串,而默许的贪欲形式则尽量多的婚配所搜刮的字符串。比方,关于字符串“oooo”,“o+?”将婚配单个“o”,而“o+”将婚配一切“o”。
.    婚配除“\n”以外的任何单个字符。要婚配包括“\n”在内的任何字符,请运用像“(.|\n)”的形式。
(pattern)    婚配pattern并猎取这一婚配。所猎取的婚配能够从发生的Matches鸠合取得,在VBScript中运用SubMatches鸠合,在JScript中则运用$0…$9属性。要婚配圆括号字符,请运用“\(”或“\)”。
(?:pattern)    婚配pattern但不猎取婚配效果,也就是说这是一个非猎取婚配,不举行存储供今后运用。这在运用或字符“(|)”来组合一个形式的各个部份是很有效。比方“industr(?:y|ies)”就是一个比“industry|industries”更简单的表达式。
(?=pattern)    正向一定预查,在任何婚配pattern的字符串最先处婚配查找字符串。这是一个非猎取婚配,也就是说,该婚配不需要猎取供今后运用。比方,“Windows(?=95|98|NT|2000)”能婚配“Windows2000”中的“Windows”,但不能婚配“Windows3.1”中的“Windows”。预查不斲丧字符,也就是说,在一个婚配发生后,在末了一次婚配今后马上最先下一次婚配的搜刮,而不是从包括预查的字符今后最先。
(?!pattern)    正向否认预查,在任何不婚配pattern的字符串最先处婚配查找字符串。这是一个非猎取婚配,也就是说,该婚配不需要猎取供今后运用。比方“Windows(?!95|98|NT|2000)”能婚配“Windows3.1”中的“Windows”,但不能婚配“Windows2000”中的“Windows”。预查不斲丧字符,也就是说,在一个婚配发生后,在末了一次婚配今后马上最先下一次婚配的搜刮,而不是从包括预查的字符今后最先
(?<=pattern)    反向一定预查,与正向一定预查类拟,只是方向相反。比方,“(?<=95|98|NT|2000)Windows”能婚配“2000Windows”中的“Windows”,但不能婚配“3.1Windows”中的“Windows”。
(?<!pattern)    反向否认预查,与正向否认预查类拟,只是方向相反。比方“(?<!95|98|NT|2000)Windows”能婚配“3.1Windows”中的“Windows”,但不能婚配“2000Windows”中的“Windows”。
x|y    婚配x或y。比方,“z|food”能婚配“z”或“food”。“(z|f)ood”则婚配“zood”或“food”。
[xyz]    字符鸠合。婚配所包括的恣意一个字符。比方,“[abc]”能够婚配“plain”中的“a”。
[^xyz]    负值字符鸠合。婚配未包括的恣意字符。比方,“[^abc]”能够婚配“plain”中的“p”。
[a-z]    字符局限。婚配指定局限内的恣意字符。比方,“[a-z]”能够婚配“a”到“z”局限内的恣意小写字母字符。
[^a-z]    负值字符局限。婚配任何不在指定局限内的恣意字符。比方,“[^a-z]”能够婚配任何不在“a”到“z”局限内的恣意字符。
\b    婚配一个单词边境,也就是指单词和空格间的位置。比方,“er\b”能够婚配“never”中的“er”,但不能婚配“verb”中的“er”。
\B    婚配非单词边境。“er\B”能婚配“verb”中的“er”,但不能婚配“never”中的“er”。
\cx    婚配由x指明的控制字符。比方,\cM婚配一个Control-M或回车符。x的值必需为A-Z或a-z之一。不然,将c视为一个原义的“c”字符。
\d    婚配一个数字字符。等价于[0-9]。
\D    婚配一个非数字字符。等价于[^0-9]。
\f    婚配一个换页符。等价于\x0c和\cL。
\n    婚配一个换行符。等价于\x0a和\cJ。
\r    婚配一个回车符。等价于\x0d和\cM。
\s    婚配任何空缺字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S    婚配任何非空缺字符。等价于[^ \f\n\r\t\v]。
\t    婚配一个制表符。等价于\x09和\cI。
\v    婚配一个垂直制表符。等价于\x0b和\cK。
\w    婚配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
\W    婚配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\xn    婚配n,个中n为十六进制转义值。十六进制转义值必需为一定的两个数字长。比方,“\x41”婚配“A”。“\x041”则等价于“\x04&1”。正则表达式中能够运用ASCII编码。.
\num    婚配num,个中num是一个正整数。对所猎取的婚配的援用。比方,“(.)\1”婚配两个一连的雷同字符。
\n    标识一个八进制转义值或一个向后援用。假如\n之前起码n个猎取的子表达式,则n为向后援用。不然,假如n为八进制数字(0-7),则n为一个八进制转义值。
\nm    标识一个八进制转义值或一个向后援用。假如\nm之前起码有nm个取得子表达式,则nm为向后援用。假如\nm之前起码有n个猎取,则n为一个后跟笔墨m的向后援用。假如前面的前提都不满足,若n和m均为八进制数字(0-7),则\nm将婚配八进制转义值nm。
\nml    假如n为八进制数字(0-3),且m和l均为八进制数字(0-7),则婚配八进制转义值nml。
\un    婚配n,个中n是一个用四个十六进制数字示意的Unicode字符。比方,\u00A9婚配版权标记(©)。

4.经常使用正则表达式

用户名    /^[a-z0-9_-]{3,16}$/
暗码    /^[a-z0-9_-]{6,18}$/
十六进制值    /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱    /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
URL    /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
IP 地点    /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?: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]?)$/
HTML 标签    /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
删除代码\\解释    (?<!http:|\S)//.*$
Unicode编码中的汉字局限    /^[\u2E80-\u9FFF]+$/

三.正则表达式要领

1.test:测试string是不是包括有婚配效果,包括返回true,不包括返回false。


    <script type="text/javascript">  
        var str = "bbs.byr.cn";  
        var reg = /b/;  
        var ret = reg.test(str);  
        alert(ret); //true  
    </script>

2.match:依据pattern举行正则婚配,假如婚配到,返回婚配效果(数组),如婚配不到返回null

<script type="text/javascript">  
    var str = "ThIS isn't me";   
    var reg = /is/ig;  
    var ret = str.match(reg);  
    alert(ret); //IS, is  
    console.log(ret); //["IS", "is"]   
</script>   

3.search :依据pattern举行正则婚配,假如婚配到一个效果,则返回它的索引数;不然返回-1

<script type="text/javascript">  
    var str = "This isn't me";  
    var reg = /is/;  
    var ret = str.search(reg);  
    alert(ret);//2  
</script>  

4.replace:依据pattern举行正则婚配,把婚配效果替换为replacement

<script type="text/javascript">  
    var str = "i love china!";  
    var pattern = /i/g;  
    var ret = str.replace(pattern, "I");  
    alert(ret); //I love chIna!  
</script>  

5.split:依据pattern举行正则支解,返回一个支解的数组

<script type="text/javascript">  
    var  str = 'http://www.baidu.com/';  
    var  reg = /\W/;  
    var  ret = str.split(reg);  
    console.log(ret); //["http", "", "", "www", "baidu", "com", ""]   
</script>  

6.exec:对string举行正则处置惩罚,并返回婚配效果.array[0]为原字符串,array[i]为婚配在全部被搜刮字符串中的位置。

<script type="text/javascript">  
    var str = "i love china!";   
    var reg = /i\B/g;   
    var ret = reg.exec(str);   
    alert(ret); // i  
    console.log(ret); //["i", index: 9, input: "i love china!"]   
</script> 

好了,正则表达式就讲到这里了,接下来让我们举行表单的考证之旅吧!

    原文作者:specialCoder
    原文地址: https://segmentfault.com/a/1190000006596712
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞