正则表达式

1. 普通字符

[abc]   匹配 [...] 中的所有字符

例如: [aeiou] 匹配字符串 "google runoob taobao" 中所有的 a e i o u 字母

"google runoob taobao".match(/[aeiou]/g) =
 ["o", "o", "e", "u", "o", "o", "a", "o", "a", "o"]
[^abc]   匹配除了 [...] 中的所有字符

例如: [aeiou] 匹配字符串 "google runoob taobao" 中除了 a e i o u 的字母

"google runoob taobao".match(/[^aeiou]/g) =
  ["g", "g", "l", " ", "r", "n", "b", " ", "t", "b"]
[A-Z]  所有大写字母,[a-z] 所有小写字母。
. 匹配除换行符(\n、\r)之外的任何单个字符,== [^\n\r]。

2. 转义字符

表达式
\r, \n 代表回车和换行符
\t 制表符
\\ 代表 \ 本身
\^ 代表 ^ 本身
\$ 代表 $ 本身
\. 代表 . 本身

3. 其他表达式

表达式
\s,\S \s匹配所有空白符,包括换行,\S 非空白符
\w 字母、数字、下划线。等价于 [A-Za-z0-9_]
\d 任意一个数字,等价于 [0-9]
\b 匹配一个单词边界,单词和空格之间的位置,\B不匹配任何字符,非单词边界
'abv123'.match(/\d\d/g)
'abv123'.match(/b.\d/g) 
'weekend,endfor,end'.match(/\bend\b/)
'@-@123abc'.match(/.\b.*/g)

4.修饰符

表达式
{n} x = n a{5} 相当于 "aaaaa"
{m,n} m <= x <= n ba{1,3} 可以匹配 "ba"或"baa"或"baaa"
{m,} x >= m \w\d{2,} 可以匹配 "a12","_456","M12344"...
? x=0 || x =1 {0,1}
* x>=0 {0,}
+ x>=1 {1,}
'It costs $12.5'.match(/\d+\.?\d*/)
'Ads by goooooogle'.match(/go{2,8}gle/)
/[1-9][0-9]*/  /[1-9][0-9]?/  /[1-9][0-9]{0,}/

5.特殊字符

^ --- 匹配输入字符串的开始位置 
$ --- 匹配输入字符串的结尾位置   
| --- 左右两边表达式之间 "或" 关系,匹配左边或者右边
( ) --- (1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
        (2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
 'end'.match(/^\w/)
 'end'.match(/\w$/)
'it is over'.match(/over|end/)
'123abc'.match(/\d+(\w+)/)
'$10.9,¥20.5'.match(/¥(\d+\.?\d*)/)

6.高级规则

  • *+ 限定符都是贪婪的,会尽可能多的匹配文字
'<h1>RUNOOB-菜鸟教程</h1>'.match(/<.*>/)
  • 在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配
'<h1>RUNOOB-菜鸟教程</h1>'.match(/<.*>/g)
'<h1>RUNOOB-菜鸟教程</h1>'.match(/<.*?>/g)
  • 通过在 *+? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。

7. 选择

  • ()将所有选择项括起来,相邻的选择项之间用 |分隔, () 表示捕获分组
'123_zjm@goole.com'.match(/(\w+)@(\w+)/)
  • ()会有一个副作用,使相关的匹配会被缓存,此时可用 ?: 来消除这种副作用。
  • 非捕获元有: ?: ?=?!
'123456789'.match(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g)
// 应用
'1234567890'.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')  

8. 预搜索、反向预搜索,不匹配 ?= ?<= ?! ?<!

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

推荐阅读更多精彩内容