JS 正则(RegExp)
JavaScript RegExp 对象
:测试工具:REGEXPER
通过 new
关键词来定义 RegExp
对象。
test()
test()
方法检索字符串中的指定值。返回值是 true
或 false
。
var r = new RegExp("e");var str = "hello world!";alert(r.test(str)) // true
exec()
exec()
方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
。
var r = new RegExp("e");var str = "hello world!";alert(r.exec(str)); // "e"
这些是JS RegExp提供的一些方法,简单介绍下;
字面量
var reg = /\bis\b/;
这就是一个简单的字面量正则赋值
\
:将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。
例如, 'n'
匹配字符 'n'
。'\n'
匹配换行符。序列 '\\'
匹配 "\"
,而 '\('
则匹配 "("
。
还有关于如何选择一个\
?
var str1 = "aaa\\AAA"; // 这里的\\,转换成文本后,只表示一个\,就是说这段待执行文本内含一个\console.log(str1); // "aaa\AAA"var r = new RegExp(/\\/); // 构建正则console.log(str1.replace(r,"R")); // "aaaRAAA"
思考一下创建正则的几种方式,并且多认识一个正则方法
+
:匹配前面的子表达式一次或多次。要匹配 +
字符,请使用 \+
。
var s = "dddddddddd";var r = /d/; // "Sddddddddd"var r1 = new RegExp("d"); // "Sddddddddd"var r2 = new RegExp(/d/); // "Sddddddddd"var r3 = new RegExp("\d"); // "Sddddddddd"var R = /d+/; // "S"var R1 = new RegExp("d+") // "S"var R2 = new RegExp(/d+/); // "S"var R3 = new RegExp("\d+"); // "S"// console.log(s.replace(rX,"S"))
\b
:匹配一个字边界,即字与空格间的位置。(不是空格!!!)
var reg = /\bis\b/;var str = "He is a boy. This is a dog. Where is she?";console.log(str.replace(reg,"IS"));// "He IS a boy. This is a dog. Where is she?" // 使用replace方法,将按照正则规则选择到的字符串(... is ...)替换为"IS",但是我们发现只有第一句被替换
只有第一句被替换?引出我们的:
\g
:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
在一段字符串中,可能存在若干符合正则的选择,不执行全局g,只会选择第一个,执行全局g,所有符合的都会被选择到。
另一种说法:global可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串
reg = /\bis\b/g;console.log(str.replace(reg,'IS')); // "He IS a boy. This IS a dog. Where IS she?"
.
:除了换行符以外的任意字符。要匹配包括 'n' 在内的任何字符,请使用像"(.|\n)"
的模式。
*
:匹配前面的子表达式零次或多次 OR (*
前边的内容可以连续重复使用任意次以使整个表达式得到匹配)
例如,zo*
能匹配 "z" 以及 "zoo"。*
等价于{0,}
。
PS:.*
连在一起就意味着任意数量的不包含换行的字符
var str = "dddddd\ndfdf";console.log(str); // "dddddd // dfdf" 这里文本排列错误,但是知道里面存在一个换行符就对了var reg = /.*/; console.log(str.replace(reg,"X")); // "X// dfdf" 选择了换行符前面的任意字符(这里重复任意次)
\d
:匹配一个数字字符。等价于 [0-9]
。
\D
:匹配一个非数字字符。等价于 [^0-9]
。
这里要提到一个中括号:
[a-z]
:字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。(包括本身)
var str = "a1b2c3d4";var reg = /\d/; // 选择一个数字字符(而已)哪怕有更多选择只选择第一个遇到的console.log(str.replace(reg,"X")); // "aXb2c3d4"reg = /\d/g; // 在全局中,选择数字字符,并返回多个(如果存在)符合规则的字串console.log(str.replace(reg,"X")); // "aXbXcXdX"reg = /[a-z]\d/g // 一个a-z任意字符和一个数字字符,并返回多个(如果存在)符合规则的字串console.log(str.replace(reg,"X")); // "XXXX"reg = /[a-z]\d/ // 一个a-z任意字符和一个数字字符console.log(str.replace(reg,"X")); // "Xb2c3d4"// \D 匹配一个非数字字符,与\d相反str = "123ABC"reg = /\D/;console.log(str.replace(reg,"0")); // "1230BC"reg = /\D/g; // 一个非数字字符,并返回多个(如果存在)符合规则的字串console.log(str.replace(reg,"0")); // "123000"reg = /\D{3}/; // 三个连续的非数字字符console.log(str.replace(reg,"456")); // "123456"// 区分大小写str = "A1B2C3d4"reg = /[A-Z]/g; // 选择A-Z大写字母任意一个,并返回多个(如果存在)符合规则的字串console.log(str.replace(reg,"O")) // "O1O2O3d4"reg = /[A-Z]\d/; // 选择A-Z大写字母任意一个和一个数字console.log(str.replace(reg,"O")) // "OB2C3d4"reg = /[A-Z]\d/g; // 选择A-Z大写字母任意一个和一个数字,并返回多个(如果存在)符合规则的字串console.log(str.replace(reg,"O")) // "OOOd4"
和大括号:
{n}
:n
是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}
:n
是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}
:m
和 n
均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
?
:匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。?
等价于 {0,1}
。
+
:匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+
等价于 {1,}
。
还有之前的:
*
:匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。*
等价于{0,}
。
以上5种在正则中被成为限定符,很好理解,限制匹配次数嘛
var str = "A1234B123C123456";var reg = /\d{4}/; // {4}之前的\d重复匹配4次console.log(str.replace(reg,"&")); // "A&B123C123456"reg = /\d{6}/ // 重复6次console.log(str.replace(reg,"&")); // "A1234B123C&"reg = /[A-Z]\d{6}/ // 一个A-Z任意字母,和一个连续6个任意数字console.log(str.replace(reg,"&")) // "A1234B123&"str = "000&1111&222222&55555555&";reg = /\d{4,}/; // 一个数字,至少匹配4次console.log(str.replace(reg,"——")); // "000&——&222222&55555555&"reg = /\d{4,}/g; // (一个数字,至少匹配4次),并返回多个符合规则的匹配串console.log(str.replace(reg,"——")); // "000&——&——&——&"reg = /\d{4,6}/g; // (一个数字,至少4次,至多6次)console.log(str.replace(reg,"——")); // "000&——&——&——55&"reg = /\d?/g; // 等价于:{0,1}console.log(str.replace(reg,"?")); // "????&?????&???????&?????????&?"reg = /\d+/; // 等价于:{1,}console.log(str.replace(reg,"+")); // "+&1111&222222&55555555&"reg = /\d+/g; console.log(str.replace(reg,"+")); // "+&+&+&+&"reg = /\d*/g;console.log(str.replace(reg,"+")); // "++&++&++&++&+"
正则表达式30分钟入门教程
正则表达式语言
正则表达式
正则表达式全部符号解释
JS 正则(RegExp)相关推荐
- 浅谈 js 正则字面量 与 new RegExp 执行效率
前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化篇>. 里面讲到了优化正则起到提升性能的问题,但是能提升多少 ...
- js正则验证特殊字符
js正则验证特殊字符 方案一 var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,regCn = /[·!#¥(--)::& ...
- js 正则之检测素数
原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题. 原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的 ...
- js正则相关知识点专题
1.JS正则表达式一条龙讲解(从原理和语法到JS正则) //www.jb51.net/article/110516.htm 2.教你轻松记住JS正则表达式 //www.jb51.net/articl ...
- js正则限制字符串长度_正则笔记(3)万字长文,慎点。
正则讲了很久,也拖了很久,今天看看怎么用吧,后续更文应该会比较准勤快了.:-) 书接上文[正则笔记(2)].这次我们来看看正则的使用: (注:斜体表示为对应规则写出的正则表达式) 一. 常用的正则表达 ...
- js正则标志/g,/i,/m说明
2019独角兽企业重金招聘Python工程师标准>>> 正则的思想都是一样的,但是具体的写法会有所不同,在这里提到的/g,/i,/m在其他的地方也许就不能用了. 一,js正则标志/g ...
- Js中RegExp对象
Js中RegExp对象 RegExp对象表示正则表达式,是由普通字符和特殊字符也叫元字符或限定符组成的文字模板,用于对字符串执行模式匹配. 描述 创建一个RegExp对象通常有两种方式,一种是通过字面 ...
- js 正则练习之语法高亮
js 正则练习之语法高亮 原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解. 今天就分析下 次碳酸钴 和 Barret ...
- js正则示例 日期格式化 分辨率 浏览器内核 布局
js正则 private validateTemperature(rule, value, callback): void {const ruleTemperature = new RegExp(/^ ...
- js 正则中冒号代表什么_JS正则表达式一条龙讲解(从原理和语法到JS正则)
正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路:正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别:正则啊,就像一个手电筒,在你需要找什么玩意的时候 ...
最新文章
- 一些非常实用的JSON 教程
- 利用tcpdump抓取mysql sql语句
- [推荐]SharePoint开发WebCast
- git已有项目修改提交
- Python实现switch效果
- start.s中的.balignl 16,0xdeadbeef
- angular之两种路由
- excel删除空行_Excel里99.9%的人都踩过的坑,早看早避开!
- 基于Java聊天系统设计(含源文件)
- 雅马哈机器人左手右手系统_3名工人花1000元用两天拼装机器人,空气不好时自动喷水...
- 8255A的工作方式控制字
- 【Flutter】基础组件【05】Icon
- 一款好用的国产软件源代码缺陷分析平台 — CodeSense
- java开发ps插件_ps样式如何导入?Photoshop插件导入教程
- APP测试基本流程以及APP测试要点
- sRGB标准与伽马校正 理解
- 详解 误差反向传播算法推导
- 微信小程序获取的微信头像模糊或者无法显示
- The client-side rendered virtual DOM tree is not matching server-rendered content. 问题
- vue开发规范(单文件组件)