加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 ━━ 入门

发布时间:2020-12-14 04:22:20 所属栏目:百科 来源:网络整理
导读:之前学了正则表达式,刚好够工作用,以为自己熟悉了,深入看了《精通正则表达式》后发觉还是差了不止那么一点点,感觉又打回原形了,bw+(?=ingb) 、((?=d)d{3})+b 这些看着都懂,但是出了问题,又不晓得咋改,现在还是把东西都整理整理,以后防止又打

之前学了正则表达式,刚好够工作用,以为自己熟悉了,深入看了《精通正则表达式》后发觉还是差了不止那么一点点,感觉又打回原形了,bw+(?=ingb) 、((?<=d)d{3})+b 这些看着都懂,但是出了问题,又不晓得咋改,现在还是把东西都整理整理,以后防止又打回原形。

zhengze

相信认真学过正则的人一开始都有看过正则表达式30分入门教程,这是一篇极好的入门文章,看完会发现开始有点看懂了正则写的是啥玩意儿了,还有各种书籍,都会或多或少提到正则这个东西。。。。

语法与属性

假设你想搜索字符串”cat”,可以用两种方法来定义正则:

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” 或者像 “ctt”这样的包含空格(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 等同于 [tnrfv] 含义:所有空白字符

7、S 等同于 [^tnrfv] 含义:所有非空白字符

举个例子,如果想验证一个由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:这篇文章的作者是小波,一个地地道道的帅哥程序猿哦。今天介绍给大家,首先感谢小波在这里抽出时间给大家分享知识。第二也祝大家在这里学习到更多的技能。有什么问题大家可以在下面留言给小波。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读