正则表达式笔记

正则详细文章 代码之美,正则之道

创建正则表达式

1. 使用一个正则表达式字面量

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

2. 调用RegExp对象的构造函数

const regex = new RegExp(pattern, [, flags])

特殊字符

^ 匹配输入的开始
$ 匹配输入的结束
* 0次或多次 {0,}
+ 1次或多次 {1,}
?
- 0次或者1次 {0,1}。
-用于先行断言
-如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪
-对 "123abc" 用 /\d+/ 将会返回 "123",
-用 /\d+?/,那么就只会匹配到 "1"。

. 匹配除换行符之外的任何单个字符
(x) 匹配 'x' 并且记住匹配项
(?:x) 匹配 'x' 但是不记住匹配项
x(?=y) 配'x'仅仅当'x'后面跟着'y'.这种叫做正向肯定查找。
x(?!y) 匹配'x'仅仅当'x'后面不跟着'y',这个叫做正向否定查找。
x|y 匹配‘x’或者‘y’。
{n} 重复n次
{n, m} 匹配至少n次,最多m次
[xyz] 代表 x 或 y 或 z
[^xyz] 不是 x 或 y 或 z
\d 数字
\D 非数字
\s 空白字符,包括空格、制表符、换页符和换行符。
\S 非空白字符
\w 单词字符(字母、数字或者下划线) [A-Za-z0-9_]
\W 非单字字符。[^A-Za-z0-9_]
\3 表示第三个分组
\b 词的边界
/\bm/匹配“moon”中得‘m’
\B 非单词边界

使用正则表达式的方法

  • exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
  • test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
  • match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
  • search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
  • replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
  • split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

练习

1、匹配结尾的数字

/\d+$/g

2、统一空格个数
字符串内如有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。

let reg = /\s+/g
str.replace(reg, " ");

3、判断字符串是不是由数字组成

str.test(/^\d+$/);

4、电话号码正则
区号必填为3-4位的数字
区号之后用“-”与电话号码连接电话号码为7-8位的数字
分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接

/^\d{3,4}-\d{7,8}(-\d{3,4})?$/

5、手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。

/^0*1(3|5)\d{9}$/

6、使用正则表达式实现删除字符串中的空格

funtion trim(str) {
  let reg = /^\s+|\s+$/g
  return str.replace(reg, '');
}

7、限制文本框只能输入数字和两位小数点等等

/^\d*\.\d{0,2}$/

8、只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./)

/^[a-z\.:\/\\]*$/

9、替换小数点前内容为指定内容
例如:infomarket.php?id=197 替换为 test.php?id=197

var reg = /^[^\.]+/;
var target = '---------';
str = str.replace(reg, target)

10、只匹配中文的正则表达式

/[\u4E00-\u9FA5\uf900-\ufa2d]/ig

返回字符串的中文字符个数
先去掉非中文字符,再返回length属性。

function cLength(str){
  var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
  //匹配非中文的正则表达式
  var temp = str.replace(reg,'');
  return temp.length;
}

11、正则表达式取得匹配IP地址前三段
只要匹配掉最后一段并且替换为空字符串就行了

function getPreThrstr(str) {
  let reg = /\.\d{1,3}$/;
  return str.replace(reg,'');
}

12、匹配<ul>与</ul>之间的内容

/<ul>[\s\S]+?</ul>/i

13、用正则表达式获得文件名

c:\images\tupian\006.jpg

可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。

function getFileName(str){
  var reg = /[^\\\/]*[\\\/]+/g;
  // xxx\ 或是 xxx/
  str = str.replace(reg,'');
  return str;
}

14、绝对路径变相对路径
"http://23.123.22.12/image/somepic.gif"转换为:"/image/somepic.gif"

var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,"");

15、用户名正则
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。

/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/

16、匹配英文地址
规则如下:
包含 "点", "字母","空格","逗号","数字",但开头和结尾不能是除字母外任何字符。

/^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/

17、正则匹配价格
开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。

/^\d+(\.\d{2})?$/

18、身份证号码的匹配
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字

/^(\d{14}|\d{17})(X|x)$/

19、单词首字母大写
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea

function firstCharUpper(str) {
  str = str.toLowerCase();
  let reg = /\b(\w)/g;
  return str.replace(reg, m => m.toUpperCase());
}

20、正则验证日期格式
yyyy-mm-dd格式
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。

/^\d{4}-\d{1,2}-\d{1,2}$/

21、去掉文件的后缀名
www.abc.com/dc/fda.asp 变为 www.abc.com/dc/fda

function removeExp(str) {
  return str.replace(/\.\w$/,'')
}

22、验证邮箱的正则表达式
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。

/^[\w-]+@\w+\.\w+$/

23、正则判断标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
<p>p的内容,同样也是没闭合的标签。
标签可能有两种方式闭合,<img xxx=”xxx” /> 或者是<p> xxx </p>。

/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i

24、正则判断是否为数字与字母的混合
不能小于12位,且必须为字母和数字的混

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i

25、将阿拉伯数字替换为中文大写形式

function replaceReg(reg,str){
  let arr=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
  let reg = /\d/g;
  return str.replace(reg,function(m){return arr[m];})
}

26、去掉标签的所有属性
<td style="width: 23px; height: 26px;" align="left"></td>
变成没有任何属性的
<td></td>
思路:非捕获匹配属性,捕获匹配标签,使用捕获结果替换掉字符串。正则如下:

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

推荐阅读更多精彩内容

  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,075评论 0 99
  • python re模块重要函数变量:1. compile() 根据正则表达式字符串,创建模式的对象。2. sear...
    野狗子嗷嗷嗷阅读 298评论 0 1
  • 正则表达式,又称规则表达式,是一种文本模式,通常用来检索、替换和控制文本。在计算机科学中,是指一个用来描述或者匹配...
    神齐阅读 312评论 0 1
  • 正则表达式一般用于检索,替换文本。 一.正则表达式元字符和语法: 这些语法是每种语言都通用的。接下来记一下pyth...
    omuraisu阅读 648评论 0 2
  • 正则表达式是一种强大的字符串处理工具,平时经常会用到。这里完整的做一次总结,以便查阅记忆。 1. 字符串中的正则表...
    超低空阅读 8,304评论 2 31