1.元字符: . 这个符号,意味着可以匹配任何一个字符 c.t 意味着匹配以c开头,之后是任意一个字符,紧跟着是t 这个符号,意味着可以忽略元字符,使得元字符的功能和普通字符一样 c.t表示找到字母c,然后是一个句点".",紧跟着是t ct表示找到字母c,然后是反斜杆"",紧跟着是t 2.字符类: 字符类是一组在方括号内的字符,表示可以匹配其中的任何一个字符 c[aeiou]t表示以c开头,接着是aeiou中任何一个,紧跟着t [a] 表示匹配单字符a [a] 表示匹配字符串[a] [[]ab]表示匹配的字符为[或者]或者a或者b (即只要出现[]ab任意一个即匹配上) [[]] 表示匹配的字符为或者[或者] (即只要出现[]任意一个即匹配上) [dabaaabcc] [abc]是相同的,在字符类中,字符的重复和出现顺序并不重要。 [.]表示匹配一个全角句号 3.字符类的范围: [b-f] [b,c,d,e,f] 是相同的,表示匹配一个字符b或c或d或e或f (即只要出现一个即匹配上) [a-z] 表示小写字母a到z (注意: a-z 表示以a开头,紧跟-,以z结尾) [A-Z] 表示大写字母A到Z [1-9] 表示非零数字 [0-9.,]表示匹配一个数字,或一个全角句号,或一个豆号 [0-9a-fA-F]表示匹配一个十六进制数 [a-zA-Z0-9-]表示匹配一个字母,或者数字,或者一个短横线- 4.字符类的反义: [^a]表示匹配任何不是a的字符 [^a-zA-Z0-9]表示匹配任何不是字母也不是数字的字符 [^abc]表示匹配一个为^或者a或者b或者c的字符 [^^]表示匹配任何不为^的字符 [^c]ei表示匹配一个“不满足'在e之前有i,但没有c'的例子" ??? 5.转义字符类: d与[0-9]作用相同,表示匹配任何一个数字 (要匹配d,应该使用正则表达式d) w与[0-9A-Za-z]作用相同,表示匹配一个数字或者字母 s表示匹配一个空字符(空格,制表符,回车,换行) D 与[^0-9]相同 W与[^0-9A-Za-z]相同 S表示匹配一个非空字符 YYYY-MM-DD 表达可以为[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9],简化为dddd-dd-dd,最简为d{4}-d{2}-d{2} 6.指定重复次数范围: x{4,4}与x{4}相同 colou{0,1}r表示匹配colour或者color a{3,5} 表示匹配aaaaa或者aaaa或者aaa 注意,这样的正则表达式会优先匹配最长的字符串,比如输入I had an aaaaawful day 会匹配单词aaaaawful中的aaaaa,而不会匹配其中的aaa。 如果输入I had an aaawful daaaaay,那么在第一次匹配时,只能找到aaawful的aaa, 只有再次执行匹配时才能找到daaaaay中的aaaaa。 a{1,} 表示匹配一个或一个以上的连续字符a。 依然是匹配最长字符串,当找到第一个a之后,正则表达式会尝试匹配尽量多个连续字母a。 .{0,}表示匹配任意内容。无论你输入的文本是什么,即使是一个空字符串,这个正则表达式 都会成功匹配全文并返回结果。 ".{0,}"表示匹配双引号,并且输入的字符串可能包含任意个字符。 7.重复的转义字符: ? 与{0,1}相同 colou?r与color{0,1}r相同 × 与{0,}相同 .*与.{0,}相同,表示匹配任意内容 + 与{1,}相同 w+表示匹配一个词。(一个词表示由一个或者一个以上的字符组成的字符) ?*+ 表示匹配字符串"?*+" [?*+]表示匹配一个?号或者一个*号或者一个+号 简化如下: ".{0,}" and "[^"]{0,}" ---> ".*" and "[^"]*" x?x?x? ---> x{0,3} y*y* ---> y* z+z+z+z+ ---> z{4,} 8.非贪婪匹配: ".*"表示匹配一个双引号,然后匹配任意内容,然后匹配一个双引号。 注意,其中匹配任意内容也可以是双引号。通常情况下,这并不是很有用。 通常在句尾加上一个?号,可以使得字符串重复不再匹配最长字符。 ".*?"表示匹配一个双引号,然后匹配最少的字符,然后是一个双引号。 9.选中匹配: 使用|来分隔,可以匹配不同的选择 cat|dog 表示匹配cat或者dog red|blue red||blue |red|blue 表示匹配red或者blue或者一个空字符串 a|b|c 与[abc]相同 cat|dog|| 表示匹配cat或者dog或者一个分隔符| [cat|dog]表示匹配a或者c或者t或者g或者o或者t或者| 简化: s|t|u|v|w ---> [s-w] aa|ab|ba|bb ---> [ab]{2} [abc]|[^abc] ---> . [^ab]|[^bc] ---> [^b] (实际上就是找交集,[^ab]和[^bc]的交集就是[^b]) [ab][ab][ab]?[ab]? ---> [ab]{2,4} 10.分组: 可以使用括号表示分组 Mon|Tues|Wednes|Thus|Fri|Satur|Sun)day 匹配一周中的某一天 (w*)ility与w*ility相同。都是匹配一个由"ility"结尾的单词。但(w*)ility更有效。 () 表示匹配一对括号 [()] 表示匹配任意一个左括号或一个右括号 (red|blue) 表示匹配red或者blue或者是一个空字符串 (分组可以包括空字符串) abc()def 与abcdef相同 (red|blue)? 与(red|blue|)相同 w+(s+w+) 表示匹配一个或者多个由空格分隔的单词 简化: w+W+w+W+w+ ---> w+(W+w+){2} w+W+w+W+w+W+w+W+w+W+w+ ---> w+(W+w+){5} 11.单词分隔符: 单词分隔符本身并不是字符,它们的宽度为0. 输入文本it's a cat中,实际有八个单词分隔符。如果在cat之后再加上一个空格,那就有九个单词分隔符。 b 表示匹配一个单词单词分隔符 bwwwb 表示匹配一个三个字母单词 aba 表示匹配两个a中间有一个单词分隔符 (这个正则表达式永远不会有匹配的字符,无论输入怎样的文本) 12.换行符号: 换行符也不是字符,宽度为0。 ^ 表示匹配行的开始位置 $ 表示匹配行的结束位置 (注意,一些实现中,用A和z作为文本的开始和借宿符号) ^& 表示匹配一个空行 ^.*& 表示匹配全文内容,因为行的开始符号也是一个字符,“.”会匹配这个符号 找到单独的一行,可以使用^.*?$ ^$ 表示匹配字符串"^$" [$] 表示匹配一个$ [^] 表示匹配一个^ 13.信用卡号1234 5678 8765 4321: 使用 d{16} 不够好, 正则表达式应该考虑到用户输入的空格和横短线
D*(dD*){16}
14.替换例子: 1). 在本例中,我们将使用 "W3School" 替换字符串中的 "Microsoft": <script type="text/javascript"> var str="Visit Microsoft!" document.write(str.replace(/Microsoft/,"W3School")) </script> 2). 在本例中,我们将执行一次全局替换,每当 "Microsoft" 被找到,它就被替换为 "W3School": <script type="text/javascript"> var str="Welcome to Microsoft! " str=str + "We are proud to announce that Microsoft has " str=str + "one of the largest Web Developers sites in the world." document.write(str.replace(/Microsoft/g,"W3School")) </script> 3). 您可以使用本例提供的代码来确保匹配字符串大写字符的正确: text = "javascript Tutorial"; text.replace(/javascript/i,"JavaScript");
4). 在本例中,我们将把 "Doe,John" 转换为 "John Doe" 的形式: name = "Doe,John"; name.replace(/(w+)s*,s*(w+)/,"$2 $1"); 5). 在本例中,我们将把所有的花引号替换为直引号: name = '"a","b"'; name.replace(/"([^"]*)"/g,"'$1'"); 6). 在本例中,我们将把字符串中所有单词的首字母都转换为大写: name = 'aaa bbb ccc'; uw=name.replace(/bw+b/g,function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} ); (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|