学习笔记-正则
发布时间:2020-12-14 00:40:22 所属栏目:百科 来源:网络整理
导读:【基础回顾】 a、字符类 [..........] 方括号内的任意字符 [^......] 不在方括号内的任意字符 . 除换行符和其他unicode终止符之外的任意字符 w 任何ASCII字符组成的单词 即[a-zA-Z0-9] W 任何不是ASCII字符组成的单词 即[^a-zA-Z0-9] s 任何unicode空白符
【基础回顾】 a、字符类 [..........] 方括号内的任意字符 [^......] 不在方括号内的任意字符 . 除换行符和其他unicode终止符之外的任意字符 w 任何ASCII字符组成的单词 即[a-zA-Z0-9] W 任何不是ASCII字符组成的单词 即[^a-zA-Z0-9] s 任何unicode空白符 如:0x0020 S 任非何unicode空白符的字符 d [0-9] D [^0-9] b、重复 {n,m} n<=重复<=m {n,} n<=重复 {n} n次 ? 可选 0次或者1次 等价于 {0,1} ("do(es)?" 可以匹配 "do" 或 "does" 中的"do") + 1次或者多次 等价于 {1,} ('zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z") * 0次或者多次 等价于{0,} (zo* 能匹配 "z" 以及 "zoo") c、修饰符 i 不区分大小; g 执行一个全局匹配 m 多行匹配模式 【相关方法】 js 1.search() string.search(reg) 返回匹配位置,否则-1 2.match() string.match(reg) 返回的是一个由匹配结果组成的数组 3.replace() string.replace(reg,str) 返回的是被替换的字符串 4.split() string,split(reg) 返回的是被分割后的数组 php 1.preg_match($reg,$string,$matchs); 2.preg_match_all($reg,$matchs); 3.preg_replace($reg,$matchs); 4.preg_split ($reg,$string); 【进阶相关】 一、非贪婪的重复(尽可能少地匹配):在待匹配的字符串后面添加一个?即可 var text = 'aaa';text.match (/a+/); => ["aaa"] var text = 'aaa';text.match (/a+?/); => ["a"] var text = 'aaab';text.match (/a+?b/); => ["aaab"]//寻找字符串中第一个可能存在的位置 【思考1】 1.利用正则匹配tiffany或者milly 2.利用正则匹配http或者https 3.利用正则匹配java或者javascript 4.利用正则匹配 tiffany或者milly like java或者javascript 二、选择| 分组() 引用 1.选择:类似于或,匹配左右任一项即可 var text ='milly';text.match (/tiffany|milly/);=> ["milly"] var text ='sela';text.match (/tiffany|milly/);=>null 【tips】: 选择时,选择默认从左边匹配,即使右边有更好的匹配项 var text = 'ab';text.match(/a|ab/ );=> ["a"] 2.分组:把单独的项组成一个子表达式; var text ='javascript';text.match (/java(script)?/)=> ["javascript","script"] 【tips】 1.在完整的模式中定义子模式,可以从目标串中抽出和圆括号中的子模式匹配的部分; 2.允许在同一表达式的后部**引用**前面的表达式,数字来实现(因为可以嵌套,数字是左括号的位置,对正则表达式的引用,并不是指对子表达式模式的引用,而是指与那个模式相匹配的文本的引用 ) 3.正则表达式会记住每个自表达式匹配的文本 4.用(?)进行分组,不生成引用 var quato =/[a|b][^'"]*[a|b]/,text='agggb' ; text.match (quato);=> ["agggb"] var quato =/([a|b])[^'"]*1/,text='agggb'; text.match (quato);=>null var quato =/"([^"*])"/,text='dddde'; text.replace(quato,' "$1" ');=> "dddde" var quato =/(?|&)id=d+(.*)/,text='w.midea.com?id=7076&mtag=1'; text.replace(quato,'$1id=7078$2');=> "w.midea.com?id=7078&mtag=1" 三、指定匹配位置 像^这样的元素不匹配某个特定的字符,他们指定匹配发生的位置,有时候称之为锚 1.^ 字符串开头 $ 字符串结尾 var text =' This ';text.match(/hi/ ); => ["hi"] var text =' This ';text.match(/^hi/ ); =>null 2.b 单词的边界 退格直接量 即单词的边界 var text =' This is Regex ';text.match(/bisb/ );=> ["is"] var text =' This is Regex ';text.match(/bib/ );=>null 3.B 非单词的边界 var text =' This is Regex ';text.match(/BisB/ );=>null var text =' This is Regex ';text.match(/ReB/ );=> ["Re"] 4.(?= )加入一个表达式 即先行断言,说明圆括号内的表达式必须正确匹配,但不包括 var text = 'javaScript';text.match(/java(Script)*(?=:)/ ); =>null var text = 'javaScript:';text.match(/java(Script)*(?=:)/ );=> ["javaScript","Script"] var text = 'java:';text.match(/java(Script)*(?=:)/ );=> ["java",undefined](?!)不匹配 var text = 'javaScript';text.match(/java(Script)*(?!:)/ );=> ["javaScript","Script"] var text = 'javaScript:';text.match(/java(Script)*(?!:)/ );=> ["java",undefined] var text = 'java:';text.match(/java(Script)*(?!:)/ );=>null 【思考1参考】 1. /tiffany|milly/ var text ='milly';text.match (/tiffany|milly/); var text ='sela';text.match (/tiffany|milly/); 2. (/http[s]?/ var text ='http';text.match (/http[s]?/); 3. /java(script)?/ var text ='javascript';text.match (/java[script]?/); var text ='javascript';text.match (/java(script)?/); 4. (/(tiffany|milly)likejava(script)?/ var text ='tiffanylikejava';text.match (/(tiffany|milly)likejava(script)?/); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |