正则表达式

2018-06-29  本文已影响0人  真的吗_a951

正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。(表单的判断)

一、创建

JavaScript通过内置对象RegExp 支持正则表达式,有两种方式创建正则表达式对象,如果我们想匹配字符串中<%xxx%>两个百分号分割的字符串可以这么写

①构造函数
var reg = new RegExp('<%[^%>]+%','g');
②字面量(简写)
var reg= /<%[^%>]%>/g;
修饰符(参数)
g:global 全文搜索,不添加的话搜索到第一个结果停止搜索,所有符合规则的全部匹配出来。
i:ingore case忽略大小写,默认大小写敏感,大小写都可以匹配到
m:multiple lines多行搜索

二、元字符

( { [ \ ^ $ | ) ? * + .并不是每个字符都有特定的意义,在不同组合中元字符有不同的意义。

字符 含义
\t 水平制表符
\r 回车符
\n 换行符
\f 换页符
\cX 与x对应的控制字符(ctrl+x)
\v 垂直制表符
\0 空字符

三、字符类

一般情况下正则表达式一个字符(转义字符算一个)对应一字符串一个字符。

四、预定义类

正则表达式提供了几个常用的预定义类来匹配常见的字符

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白符(回车、换行、制表、空格)
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 单词字符,字母,数字下划线
\W [^a-zA-Z_0-9] 非单词字符

/x0B/垂直tab

边界

字符 含义
^ 以xxx开头
$ 以xxx结尾
\b 单词边界
\B 非单词边界

注意
^不在中括号内,/^hello/g表示匹配以hello开头的字符串,没有返回null
$的用法是/hello$/g在字符串最后
\b单词边界,/\bhello\b/g表示前后都要有边界(空格或者中横线、开头或者结尾,还有\t,\n,\r),/\bhello/g表示只要前面有边界就可以匹配到。

量词

为了匹配连续出现n次的字符串,正则表达式引入了一些量词,

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n-m次
{n,} 至少出现n次

量词前的字符串有括号,表示要整个字符串匹配才算匹配,如果没有括号,最后一个字符串也在量词匹配的范围

(url:含http://或者https://或者//都表示标准的url)
只对前一个字符有作用

//判断是否符合url标准:
str.math(/https?:\/\/.+/) //包含http或者https
str.math(/^(https?:)?\/\/.+/) // 包含http、https、//

如何判断用户输入的是不是一个手机号
str1.match(/^1[3578]\d{9}$/g)//满足条件

贪婪模式

默认尽可能多的匹配
举个栗子:

var str = 'hello everyone "I" am "cjj" xixixi'
str.match(/".*"/)
//.表示除了回车和换行之外的所有字符
//*表示任意次
//结果是"I" am "cjj"

分析:
① 执行".*:因为str整个字符串都满足.*又表示任意次,所以按照顺序,匹配到第一个"号开始,到最后一个字符i结束。
str.match((/".*"/)执行到第二个",发现匹配的最后一个不是"号,于是开始往回找,找最后一个"号,因此输出不是分别含有""的字符串。

非贪婪模式

非贪婪模式和贪婪模式相反,可通过在代表数量的标识符后放置?来开启非贪婪模式。 默认尽可能少的 匹配

var str = 'hello everyone "I" am "cjj" xixixi'
str.match(/".*?"/) //"I" "cjj"

其他重点

表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1

正则表达式的方法

var str = '123 456 789'
var reg = /\d{3}/g
while(result = reg.exect(str)){
    console.log(result[0]
}
//123
//456
//789

(字符串)

'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1

举个栗子

上一篇 下一篇

猜你喜欢

热点阅读