正则表达式学习

正则表式(Regular Expression)简写为regex、regexp或RE
正则表达式(相对于找规律),正则表达式是对字符串操作的一种逻辑公式,用事先特定好的一些字符。作用:正则表达式主要用来验证、搜索和替换
正则表达式是一个“规则字符串”用来表达对字符串的一种过滤逻辑
正则表达式通常被用来检索、替换那些某个模式的文本。用老师的话来说就是找规则,总结出规则来匹配你要找的字符。

 

正则表达式表:

正则字符

释义

举例

+

前面元素至少出现一次

ab+:ab、abbbb 等

*

前面元素出现0次或多次

ab*:a、ab、abb 等

?

匹配前面的一次或0次

Ab?: A、Ab 等

^

作为开始标记

^a:abc、aaaaaa等

$

作为结束标记

c$:abc、cccc 等

\d

数字

3、4、9 等

\D

非数字

A、a、- 等

[a-z]

A到z之间的任意字母

a、p、m 等

[0-9]

0到9之间的任意数字

0、2、9 等

 

下面是正则表达式的匹配模式
g: 表示全局(global)模式,表示pattern会应用于所有字符串,而不是找到一个匹配项后立即停止。
i :表示不区分大小写(ignore)模式。即忽略pattern和字符串的大小写。
m:表示多行(multiple)模式。 即到一行文本末尾时还会继续查找下一行中是否存在匹配的项。

练习:

在正则表达式中最间单最粗暴的就是纯文本匹配,刚开始学习的时候。听到说纯文本也是正则表达式也是惊了。接触过的正则都是各种字符组成的奇怪的字符。
也就是说要匹配1,那就打1.这可谓是最简单的正则匹配了。

1.验证字符串的组成规则,第一个须为数字,后面可以是字母、数字、下划线,总长度为5-20位

/^\d{1}[\w|_|\d]{4,19}$/

2.让2013-6-7 变成 2013.6.7

var str = '2013-06-07'

str.replace(/-/g,'.') 或者  let regExp = /-/g; str.replace(regExp, '.')

3.请使用正则取出:Tech,Sales,内容1,内容2

 

 

str.match(regExp)  //-------- ["Tech", "Sales", "内容1", "内容2"]

 

4.  var str = "get-element-by-id";改成驼峰命名

let regExp = /-(\w)/g;
 str= str.replace(regExp, function(word) {
      return word.substring(1).toUpperCase();
   })

 

5. 单词首字母都大写

var name = ' han mei mei';

name = name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
  );

 

6.从一个字符串中提取链接地址。

var str = 'IT面试题博客中包含很多  <a href="http://hi.baidu.com/mianshiti/blog/category/微软面试题">微软面试题</a>';
var regExp = /<a(?: [^>]*)+href="(.*)"(?: [^>]*)*>/;

console.log(str.match(regExp)[1])

 

7.用正则表达式匹配邮箱
在新学习了正则规律中,一般情况下,看到下面的这句。
您好这是我的邮箱:Abc2334464@qq.com。请收到留言后给我回复
最先都是想到的这样匹配它的

(?<=:).+?(?=,)

 


这里使用了(?<=exp):零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp,(?=exp):一个点加一个+号表示:.可以匹配任意字符,+加号代表着限定符表示连接。?号是:懒惰模式(尽可能少的匹配,因为默认下正则表达示是贪婪模式,有多少匹配多少)零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。在上面中这句中能成功匹配。但是有局限的。看了正则文档发现还有更好的匹配方式。这能更好的匹配到绝大多数的邮箱。
Email地址:

^\w+([­+.]\w+)@\w+([­.]\w+).\w+([­.]\w+)*$

这里的匹配:
^ 匹配字符串的开始
$ 匹配字符串的结束
\ 转义符 在一些语言中在符号会代表着特定的功能,转义字符的可以更好识别。

 

9.去掉以下字符串中所有的字母
“aaaa1ahNvuhfewoi11384209e7439fsDhfdohd8892489”
[a-zA-Z] 匹配字母大小写,这里匹配出来后将匹配的字符替换成空,即可去掉字符中所有的字母。

 

 

 

  

10.匹配的用户密码(以字母开头、内容可包含数字、字母、下划线)Acb_88dcfsv
[a-zA-Z]{1}/w{7-9}这里的[]号里的匹配的是大以大小写字母开始的,后面的花括号则是匹配的是一位数。\w匹配的则是数字字母下划线后面的花括号则是需要匹配的多少位。

11.将以下内容中标签的样式全部去掉

 <p class="Normal" style="text-align:justify;page-break-inside:auto;page-break-after:auto;page-break-before:auto;margin-top:0pt;margin-bottom:

 

 

上面以style=”纯文本字符,也就是特定字符开始匹配,后面加一个零宽先行断言以双引号结尾。这样便匹配了sytle标签里的样式,去掉它也是替换它为空即可。

通过一些练习,可以更好的了解正则表达式,了解它的匹配规律。不难发现。正则表达式的高效实用。巧用正则表达式可以让程序开发更具效率。

posted @ 2020-03-18 13:57  Keaton-Zhang  阅读(259)  评论(0编辑  收藏  举报