之前学了正则表达式,刚好够工作用,以为自己熟悉了,深入看了《精通正则表达式》后发觉还是差了不止那么一点点,感觉又打回原形了,\b\w+(?=ing\b) 、((?<=\d)\d{3})+\b 这些看着都懂,但是出了问题,又不晓得咋改,现在还是把东西都整理整理,以后防止又打回原形。
相信认真学过正则的人一开始都有看过正则表达式30分入门教程,这是一篇极好的入门文章,看完会发现开始有点看懂了正则写的是啥玩意儿了,还有各种书籍,都会或多或少提到正则这个东西。。。。
语法与属性
var searchWord = /cat/ ; 或者 var searchWord =new RegExp(‘cat’);
如果你通过match()、search()、exec()或者test() 方法在某个字符串上使用这个表达式,它会返回所有包含cat的字符串,不管在字符串中它的位置再哪,如:catalog、concatenation或scat。
1、如果你只希望匹配单词’cat’的字符串,旁边没有任何其他字母,那么需要使用一个 ^ 表示开始以及 $表示结尾:
var searchWord = /^cat$/ ; 或者 var searchWord =new RegExp(‘^cat$’);
2、也可以省略开始标识符^或者结束标识符$
如:var searchWord = /^cat/ ; 这些代码就会匹配cat、catalog、catastrongphe;
如:var searchWord = /cat$/ ; 这些代码就会匹配polecat或wildcat;
3、如果想查找“cat”,而不考虑大小写,那么需要在第二个斜杠(/)后面使用i属性,这样就可以忽略大小写了;
如:var searchWord = /cat/i ; 这些代码就会匹配cat 、 Catherine、CAT
4、如果有个字符串,在它里面包含了单词”cat”多次,而你想要以数组的形式所有的匹配,你需要添加参数”g”来表示”全局”
如:var searchWord = /cat/g ;
5、默认情况下,正则只在单行字符串中匹配模式,如果想在多行字符串中匹配一个模式,那么需要使用参数”m”表示“多行”,也可以混合起来用,顺序并不重要
如:var searchWord = /cat/gim ;
通配符搜索、约束范围、替换
1、句点字符(.)在正则中表示”任意字符”,var searchWord = /c.t/gim ;
这个表达式匹配”cat”、”cot”、”CRT”,甚至没啥意思的”c#t”和”c!t” 或者像 “c\tt”这样的包含空格(\t 表示 制表符)
这样的对需求来讲可能弹性太大了,所以我们需要使用方括号([])来把选择的范围限制到想提供的范围内:
如:var searchWord = /c[aou]t/gim ; 这样就可以匹配所有大小写的”cat”、”cot”、”cut” ,也可以在方括号内提供一些区间,如a-z匹配所有小写字母,A-Z匹配所有大写字母,而0-9则匹配数字
2、举例来说,如果想要查找所有小些字母后紧跟大写字母的单词,可以使用 :var searchWord = /[a-z][A-Z]/gim ;
3、可以在方括号内使用字符”^”在搜索条件中排出一个选项,如果避免结果出现”cut”,
可以使用:var searchWord = /c[^u]t/g ;
4、方括号内每次只匹配一个字符,也就是为啥不会匹配类似”cost”、”coast”或者”cast”这样的字符串了,如果想匹配几个选项,可以在圆括号内使用管道符号(|) : var searchWord = /c(^u|a|o|os|oas|as)t/g ;
现在这个表达式匹配”cat”、”cot”、”cost”、”coast”、”cast”,但是不包括”cut”,因为里面有^u
用量词约束字符的数量
在许多情况下,我们希望允许一定范围内的字符,如a-z,但是限制他们的数量,要达到这个目的,可以在正则里使用量词
1、* 表示 0或多次
2、+ 表示 1次以上
3、? 表示 0或1次
4、{n} 表示 n次
5、{n,m} 表示 n~m次
(但是要注意的,在每个表达式后面添加 “?” 意味着正则表达式应该匹配字符串,但次数越少越好)
比如,如果想匹配一串数字的语法,它们由两组4个字符组成,每个之间都由破折号(-)分开,可以使用:
var searchWord = /[a-z|0-9]{4}\-[a-z|0-9]{4}/gim ;
注意:如果需要对按照字面意思直接使用的字符转移,它们没有正则模式中可能有的特殊含义,如果这个例子中的破折号,可以通过在字符前面添加反斜杠符号(\)来打到这个目的,需要转义的字符有-、+、/、(、)、[、]、*、{、}、和?。例如:/c.t/匹配 “cat”或 “c4t”,而/c\.t/只匹配”c.t” 。
词界、空白字符以及其他快捷符号
所有的这些不同选项都可以产生非常费解的正则表达式,这也是为什么需要提供一些快捷符号的原因。
我们都只有一些表示空白字符的特殊字符符号,如果 \n 表示换行、\t表示制表符,正则也提供一些这样的符号,如:
1、\d 等同于 [0-9] 含义:整数
2、\D 等同于 [^0-9] 含义:非整数
3、\w 等同于 [a-zA-Z0-9] 含义:所有字母数字字符、下划线
4、\b 含义:单词词界
5、\B 含义:非单词词界
6、\s 等同于 [\t\n\r\f\v] 含义:所有空白字符
7、\S 等同于 [^\t\n\r\f\v] 含义:所有非空白字符
举个例子,如果想验证一个由9位数字组成,在第3位和第5位后面有破折号(如123-45-6789),那么就可以使用下面的正则,带有可选的破折号(使用?数量词),因为有人可能不会输入它们:
var searchWord = /[0-9]{3}\-?[0-9]{2}\-?[0-9]{4}/ ;
作为选择,可以使用快捷符号:
var searchWord = /\d{3}\-?\d{2}\-?\d{4}/ ;
要特别注意一点:如果在引号内或构造器符号中使用快捷符号,需要在前面添加两个反斜杠,而不是一个,因为需要对它们进行转义,如果上面例子换成 new RegExp的话,就是:ar searchWord = new RegExp(‘\\d{3}\-?\\d{2}\-?\\d{4}’,”);
有了这些,我们就可以编写自己的简单的正则表达式了:
var searchWhat = /^[\w]+(\.[\w]+)*@([\w]+\.)+[a-z]{2,7}$/ ; 这样的匹配就可以非常非常容易去理解了
正则表达式的方法
有几个方法将正则表达式作为参数使用。表达式本身被称为模式(pattern),它会匹配你需要获取或检查的信息。
1、pattern.test(string) :检查字符串是否匹配模式,并返回true 或 false;
2、pattern.exec(string) :对字符串和格式进行一次匹配,并返回结果的数组或null;
3、string.match(pattern) :对字符串和模式进行匹配,并将匹配结果作为字符串数组返回,或返回null;
4、string.search(pattern)
5、string.replace(pattern,replaceString)
6、string.split(pattern,limit) ; limit会限制数组元素的数量
4/5/6都是跟JS的理解是一样的,
这个文章适合刚入门的为了看懂跟写简单正则的人看的,内容从书上摘取,能够让人非常简单就入门了正则。
PS:这篇文章的作者是小波,一个地地道道的帅哥程序猿哦。今天介绍给大家,首先感谢小波在这里抽出时间给大家分享知识。第二也祝大家在这里学习到更多的技能。有什么问题大家可以在下面留言给小波。
原文链接:https://www.f2er.com/regex/359129.html