正则表达式用法记录

正则是干什么的

正则是一种规则,用来匹配和捕获字符串的规则。

正则的规则

  • 元字符
元字符 对应说明
. 匹配除换行符之外的任意字符
\w 匹配字母数字下划线,等同于:[a-zA-Z0-9_]
\s 匹配任意空白符
\d 匹配数字,等同于[0-9]
\b 匹配单词边界
^ 匹配字符串的开始
$ 匹配字符串的结束
> 还有一个 或匹配,如 /x y/ 正则可匹配x或y两个字符(ps: 与markdown的表格语法冲突)
  • 反义字符
反义字符 对应说明
[^x] 匹配除“x”之外的所有字符,其中“x”可以为任意字符
[^zyx] 同上,匹配除“x、y、z”之外的任意字符
\W 匹配除了字母、数字、下划线之外的所有字符,等同于:[^\w]
\S 匹配除空白符之外的任意字符,等同于:[^\s]
\B 匹配不是单词边界的字符,等同于:[^\b]
\D 匹配不是数字的所有字符,等同于:[^\d]
  • 转义字符
转义字符 对应说明
\xnn 匹配十六进制数
\f 匹配换页符,等同于:\x0c
\n 匹配换行符,等同于:\x0a
\r 匹配回车符,等同于:\x0d
\t 匹配水平制表符,等同于:\x09
\v 匹配垂直制表符,等同于:\x0b
\unnnn 匹配Unicode字符,如:\u00A0
  • 重复匹配
匹配字符 对应说明
* 重复出现零次或多次
+ 重复出现一次或多次
? 重复出现零次或一次
{n} 重复出现n次
{n,} 至少重复出现n次
{m,n} 重复重现m到n次,其中,m<n
  • 分组/捕获
分组字符串 对应说明
(exp) 用小圆括号进行分组,如日期中年月日的分组:/(\d{5})-(\d{1,2})-(\d{1,2})/每个分组将产生分组号,从第一个括号开始,可以使用\n的形式在正则中使用分组号,如匹配成对出现的HTML标签,可以写成:/<(\w+)></\1>/
(?:exp) 匹配exp正则,但不产生分组号
exp1(?=exp2) 前瞻断言,匹配exp1,但后面必须是exp2如匹配名字叫xianlie,但不姓zhao的人:/zhao(?=xianlie)/
exp1(?!=exp2) 后瞻断言,匹配exp1,但后面不能是exp2如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/
  • 贪婪与惰性
相关字符 对应说明
*? 重复任意次,但尽可能少的重复
+? 重复一次或多次,但尽可能少的重复
?? 重复零次或一次,但尽可能少的重复
{m,n}? 重复m到n次,但尽可能少的重复
{n,}? 重复n次以上,但尽可能少的重复
{n}? 重复n次,但尽可能少的重复
  • 修饰符
修饰符 对应说明
i ignoreCase的缩写,表示忽略字母的大小写
m multiline的缩写,更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
g global的缩写,进行全局匹配,即对字符串进行全文匹配,直到字符串遍历束

如任何创建正则表达式

  1. 字面量创建
var reg = /\w/
  1. 实例方式创建
var reg = new RegExp('/\w/')

两者的区别
假设现在需要动态匹配字符串,也就是匹配的内容不固定。

var name = 'iceman';
var reg = /^\d+"+name+"\d+$/;
console.log(reg.test('2015iceman2016')); // false
console.log(reg.test('2015"""nameeee"2016')); // true
var name = 'iceman';
var reg = new RegExp("^\\d+" + name + "\\d+$", "g");
console.log(reg.test('2015iceman2016')); // true
  1. 字面量方式中出现的一切都是元字符,不能进行变量值的拼接,而实例创建的方式可以;
  1. 字面量方式中直接写\d可以,而在实例中需要把它转义 \d

正则用法

  1. 匹配一字母开头,数字的结尾的任意字符串
var reg = /^[a-z].\d$/;reg.test('a551') //false 中间只能有一个任意字符
var reg = /^[a-z].\d$/;reg.test('a55') //true
var reg = /^[a-z].*\d$/;reg.test('a5sdsd5') // true *代表中的部分重复出现零次或多次
var reg = /^[a-z|A-Z].*\d$/;reg.test('a5sdsd5') //true
var reg = /^[a-z|A-Z].*\d$/;reg.test('A5sdsd5') //true
var reg = /^[a-z].*\d$/i;reg.test('A5sdsd5') // true 修饰词i,忽略大小写
  1. 匹配有效数字,正负数,整数,小数,零
/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/.test('1.')//fale
  1. 匹配18-56的数字
/^([1][8-9]|[2-4]\d)|[5][0-6]$/.test('25') //true
  1. exec方法

正则表达式默认有一个lastIndex字段,该字段是正则每一次捕获时,在字符串中开始查询的位置,默认的值是0;

console.log(/([1][8-9]|[2-4]\d)|[5][0-6]/.exec('aaaa25cccc'));
//["25", "25", index: 4, input: "aaaa25cccc"]

exec方法会返回一个数组

  • 数组第一项是正则匹配到的字符串
  • 有一个index项,捕获字符串的索引位置
  • 有一个input项,捕获的原字符串
  1. match方法

把所有的符合的匹配的字符串获取到

'aaaa25cccc35'.match(/([1][8-9]|[2-4]\d)|[5][0-6]/g);
//["25", "35"]
  1. replace 方法
var str = '今年是2017年';
var ary = ['零', '壹', '贰', '叁', '肆', '伍', '陆','柒', '捌', '玖', '拾'];
str = str.replace(/\d/g, function () {
    /*
     * 第一次执行:大正则捕获的是2,返回的是ary[2] --> '贰'
     * 第二次执行:大正则捕获的是0,返回的是ary[0] --> '零'
     * .....
     */
    return ary[arguments[0]];
});
console.log(str);

参考文章

1.正则详解及实战(JavaScript)
2.2017百度前端技术学院- 正则表达式之入门

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

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,980评论 0 20
  • --------------------------正则的作用--------------------------...
    G_whk阅读 606评论 1 5
  • 推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1阅读 11,452评论 9 151
  • 几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    没技术的BUG开发攻城狮阅读 4,581评论 0 23
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,134评论 0 9