正则表达式

正则表达式(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 空字符

三、字符类

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

  • 范围var reg = /[a-z0-9A-Z]/ig[]表示获取之内的范围内的值,可以自己设置成任意一段字符串,表示在这个范围内获取值,
  • 取反[^···]表示获取这个范围内没有的值

四、预定义类

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

字符 等价类 含义
. [^\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"

其他重点

  • 前面的方法都是针对其前一个字符,若要看成一个整体,需要加()

  • 若是两个字符串都需要匹配(frist|second),表示或,会把两边看做一个整体

  • 前瞻

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

正则表达式的方法

  • reg.test(str); //true或者false;判断str是否符合reg规则
  • exec(str)持续运行
var str = '123 456 789'
var reg = /\d{3}/g
while(result = reg.exect(str)){
    console.log(result[0]
}
//123
//456
//789

(字符串)

  • .split(reg)复杂分隔
    'a1b2c3d'.split(/\d/);//["a","b","c","d"]
  • .search(reg)不进行全局匹配,会忽略glastIndex属性,并且只会从字符串的开始进行检索,返回字符串的第一个匹配位置。
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
  • .match(reg)找到一个或多个匹配文本。
  • .replace(reg,replaceStr)可以吧符合正则的东西做一个替换。

举个栗子

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,979评论 0 20
  • python的re模块--细说正则表达式 可能是东半球最详细最全面的re教程,翻译自官方文档,因为官方文档写的是真...
    立而人阅读 22,812评论 4 46
  • //定义正则表达式的两种方式,在用构造函数的时候,有些地方是要加转义字符的。 //1、字面量。 var reg =...
    xiaobing0324阅读 482评论 0 0
  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,030评论 0 99
  • 推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1阅读 11,437评论 9 151