JavaScript从入门到放弃 -(六)正则表达式
正则表达式
- 1. 正则表达式概述
- 1.1 什么是正则表达式
- 1.2 正则表达式的特点
- 2. 正则表达式在JavaScript中的使用
- 2.1 创建正则表达式
- 2.1.1 通过调用 RegExp 对象的构造函数创建
- 2.1.2 通过字面量创建
- 2.2 test测试正则表达式
- 3. 正则表达式中的特殊字符
- 3.1 正则表达式的组成
- 3.2 边界符
- 3.3 字符类
- 3.3.1 [ ] 方括号
- 3.3.2 [ - ] 方括号(内部) 范围符-
- 3.3.3 字符组合
- 3.3.4 [ ^ ] 方括号(内部) 取反符^
- 3.4 量词符
- 案例:用户名验证
- 3.5 括号总结及正则验证工具
- 3.5.1 中括号
- 3.5.2 大括号
- 3.5.3 小括号
- 3.5.4 正则表达式在线验证-菜鸟工具
- 3.6 预定义类及座机号码、表单验证案例
- 3.6.1 预定义类(也称元字符)
- 3.6.2 座机号码验证案例
- 3.6.3 表单验证案例
- 4. 正则表达式中的替换及敏感词过滤案例
- 4.1 replace 替换
- 4.2 正则表达式参数
- 5. 常用正则表达式
- 5.1 数字校验
- 5.2 字符校验
- 5.3 特殊需求处理
学习目标
- 了解正则表达式的作用;
- 能够写出简单的正则表达式;
- 能够使用正则表达式对表单进行验证;
- 能够使用正则表达式替换内容。
学习内容:
- 正则表达式概述;
- 正则表达式在JavaScript中的使用;
- 正则表达式中的特殊字符;
- 正则表达式中的替换。
1. 正则表达式概述
1.1 什么是正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象(是作为对象的形式存在的)。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤 掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。
其他语言也会使用正则表达式,本节内容主要学习如何利用 JavaScript 正则表达式完成表单验证。
1.2 正则表达式的特点
- 灵活性、逻辑性和功能性非常的强;
- 可以迅速地用极简单的方式达到字符串的复杂控制;
- 对于刚接触的人来说,比较晦涩难懂。比如验证邮箱:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
- 实际开发,一般都是直接复制写好的正则表达式,但是要求会使用正则表达式并且根据实际情况修改正则表达式。 比如验证用户名:
/^[a-z0-9_-]{3,16}$/
2. 正则表达式在JavaScript中的使用
2.1 创建正则表达式
在 JavaScript 中,可以通过两种方式创建一个正则表达式。
2.1.1 通过调用 RegExp 对象的构造函数创建
1). 语法格式:
var 变量名 = new RegExp(/表达式/);
2). 应用示例:
var regexp = new RegExp(/123/); // 要求必须输入 “123”
如果正则表达式将会改变,或者它将会从用户输入等来源中动态地产生,就需要使用构造函数来创建正则表达式。
2.1.2 通过字面量创建
1) 语法格式:
var 变量名 = /表达式/;
2) 应用示例:
Var rg = /123/
如果该正则表达式是始终保持不变的,使用字面量创建正则可获得更好的性能。
通常采用字面量创建,这样代码更简洁。
2.2 test测试正则表达式
test()
正则对象方法(正则表达式的专门方法),用于检测字符串是否符合该规则,该对象会返回 true
或 false
,其参数是测试字符串。
1)语法规范:
regexObj.test(str)
regexObj
是写的正则表达式str
要测试的文本
2)应用示例:
var rg = /123/;
console.log(rg.test(123)); // 返回true
3. 正则表达式中的特殊字符
3.1 正则表达式的组成
一个正则表达式可以由简单的字符构成,比如 /abc/
,也可以是“简单”+“特殊字符”的组合,比如 /ab*c/
。其中特殊字符也被称为元字符,是在正则表达式中具有特殊意义的专用符号,如 ^
、$
、+
等。
更多特殊字符请参考:
- MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
- jQuery API手册: 正则表达式;
- 正则测试工具: https://tool.oschina.net/regex
下面把元字符划分为几类进行学习
3.2 边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。
边界符 | 说明 |
---|---|
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
应用示例:
示例一
// 边界符 ^ $
var rg = /abc/; // 正则表达式里不需要加引号,不论其是何种数据类型
console.log(rg.test('abc')); // 返回 true
console.log(rg.test('aabc')); // 返回 true
console.log(rg.test('abcc')); // 返回 true
解释:/abc/
只要包含有abc
这个字符串,返回的都是true
。
注:它仅能匹配 “abc
” 字符按照顺序同时出现的情况。
示例二
var reg = /^abc/; // 表示以 abc 开头的
console.log(rg.test('abc')); // 返回 true
console.log(rg.test('aabc')); // 返回 false,没有以abc开头
console.log(rg.test('abcc')); // 返回 true
示例三
var reg = /^abc$/; // 精确匹配,必须是abc才符合规范(全字匹配)
console.log(rg.test('abc')); // 返回 true
console.log(rg.test('abcabc')); // 返回 false
console.log(rg.test('aabc')); // 返回 false
console.log(rg.test('abcc')); // 返回 false
3.3 字符类
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。
3.3.1 [ ] 方括号
示例一
var rg = /[abc]/;
console.log(rg.test('black')) // 返回 true
console.log(rg.test('color')) // 返回 true
console.log(rg.test('red')) // 返回 false
解释: 字符串中,只要包含 abc
中任意一个字符,都返回 true
。
示例二
var rg = /^[abc]$/; // 三选一:只有是 a 或 b 或 c 才返回 true
console.log(rg.test('aa')) // 返回 false
console.log(rg.test('a')) // 返回 true
3.3.2 [ - ] 方括号(内部) 范围符-
方括号内部加上 -
(短横线), 连接的意思,表示范围。
应用示例:
a 到 z 26个英文字母(小写)都可以输入
var rg = /^[a - z]$/; // 限定为26个英文小写字母,任意一个小写字母都返回 true
console.log(rg.test('c')); // 返回 true
3.3.3 字符组合
应用示例:
示例一:
26个英文字母(不区分大、小写)都可以输入
var rg = /^[a - zA-Z]$/; // 限定为26个英文字母(不区分大、小写)
console.log(rg.test('c')); // 返回 true
示例二:
数字和字母(不区分大、小写)都可以输入
var rg = /^[a - zA-Z0-9]$/; // 数字+字母均返回 true
console.log(rg.test(5)); // 返回 true
3.3.4 [ ^ ] 方括号(内部) 取反符^
如果方括号内部加上 ^
表示取反,只要包含方括号内的字符,都返回 false
。
注意和边界符
^
的区别,边界符是写到方括号外面。
示例:
var reg1 = /^[^a-zA-Z0-9_-]$/; // 中括号内的 ^ 表示取反
console.log(rg.test(5)); // 返回 false
console.log(rg.test('!')); // 返回 true
3.4 量词符
量词符用来设定某个模式出现的次数。
量词 | 说明 |
---|---|
* | 重复 0 次 或 更多次 (相当于 >=0) |
+ | 重复 1 次 或 更多次(相当于 >=1) |
? | 重复 0 次 或 1 次(相当于 1 或 0) |
{ n } | 重复 n 次 |
{ n, } | 重复 n 次 或 更多次 |
{ n,m } | 重复 n 到 m 次 |
上表中的量词符可划分为符号和花括号两大组。花括号这组要重点掌握。
示例一:
var reg = /^a$/;
a 后面添加 *
(相当于 >= 0 ):
var reg = /^a*$/;
console.log(reg.test('')); // 返回 true
console.log(reg.test('a')); // 返回 true
console.log(reg.test('aaa')); // 返回 true
解释: *
的意思,就是前一项出现零次或者多次。
示例二:
a 后面添加 +
(相当于 >= 1 ):
var reg = /^a+$/;
console.log(reg.test('')); // 返回 false
console.log(reg.test('a')); // 返回 true
console.log(reg.test('aaa')); // 返回 true
+
:匹配前面一个表达式 1 次或者多次。等价于 {1,}
示例三:
a 后面添加 ?
(相当于 0 || 1):
var reg = /^a?$/;
console.log(reg.test('')); // 返回 true,出现了 0 次
console.log(reg.test('a')); // 返回 true,出现了 1 次
console.log(reg.test('aaa')); // 返回 false,出现了多次
匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。
示例四:
{ 3 } 重复 3 次
var reg = /^a{3}$/; // 让花括号前面的 a 只能出现 3 次
console.log(reg.test('')); // 返回 false,出现了 0 次
console.log(reg.test('a')); // 返回 false,出现了 1 次
console.log(reg.test('aaa')); // 返回 true,重复了 3 次
console.log(reg.test('aaaa')); // 返回 false,重复了4 次
示例五:
{ 3, } 大于等于 3
var reg = /^a{3,}$/; // 让花括号前面的 a 只能出现 3 次
console.log(reg.test('')); // 返回 false,出现了 0 次
console.log(reg.test('a')); // 返回 false,出现了 1 次
console.log(reg.test('aaa')); // 返回 true,出现了 3 次
console.log(reg.test('aaaa')); // 返回 true,大于了 3 次
示例六:
{ 3, 6} 大于等于 3,并且 小于等于6
var reg = /^a{3,6}$/; // 让花括号前面的 a 只能出现 3 ~ 6次
console.log(reg.test('')); // 返回 false,出现了 0 次
console.log(reg.test('a')); // 返回 false,出现了 1 次
console.log(reg.test('aaa')); // 返回 true,出现了 3 次
console.log(reg.test('aaaa')); // 返回 true,大于 3 小于 6
console.log(reg.test('aaaaaaa')); // 返回 false,大于了 6 次
{n,m} :n 和 m 都是整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。
注意:{3,6}
花括号内,量词之间 不能有空格,否则没有效果。
案例:用户名验证
功能需求:
- 如果用户名输入合法, 则后面提示信息为 : 用户名合法,并且颜色为绿色;
- 如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为绿色。
- 用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为 6~16位.;
分析:
- 首先准备好正则表达式模式 / ^ [a-zA-Z0-9-_]{6,16}$/
- 当表单失去焦点就开始验证.;
- 如果符合正则规范, 则让后面的span标签添加 right 类;
- 如果不符合正则规范, 则让后面的span标签添加 wrong 类。
HTML结构
<input type="text" class="uname"><span>请输入用户名</span>
CSS样式
<style>span {color: #aaa;font-size: 14px;} .right {color: green;} .wrong {color: red;}
</style>
JavaScript代码
<script>// 量词是设定某个模式出现的次数var reg = /^[a-zA-Z0-9_-]{6,16}$/;var uname = document.querySelector('.uname');var span = document.querySelector('span');// 失去焦点时触发uname.onblur = function() {if (reg.test(this.value)) {span.className = 'right';span.innerHTML = '用户名格式正确!'} else {span.className = 'wrong';span.innerHTML = '用户名格式错误!'}}
</script>
【onblur 事件】:请参阅 w3cschool 文档
3.5 括号总结及正则验证工具
- 中括号 字符集合。多选一,匹配方括号中的任意字符都可以;
- 大括号 量词符。里面表示重复次数,如果不加小括号,只对它前面的1个字符起作用;
- 小括号 表示优先级。
3.5.1 中括号
// 多选 1 ,表示 a || b || c
var reg=/^[abc]$/
多选 1 ,表示 a || b || c
3.5.2 大括号
// 表示只让 c 重复 3 次 abccc 结果为 true
var reg = /^abc{3}$/;
console.log(reg.test('aabbccc')); // false
console.log(reg.test('abccc')); // true
解释: 大括号的量词限定只对靠近它的左边第一个字符起作用。
3.5.3 小括号
// 表示让 abc 重复 3 次
var reg = /^(abc){3}$/;
console.log(reg.test('aabbccc')); // false
console.log(reg.test('abccc')); // false
console.log(reg.test('abcabcabc')); // true
解释: 小括号,表示优先级,把括号中的当做一个整体参与运算。
3.5.4 正则表达式在线验证-菜鸟工具
由于本地测试,需要通过不同的log来打印比较麻烦,其实可以借助于在线工具来完成
正则表达式在线测试: https://c.runoob.com/front-end/854
注意,此工具的表达式输入框中,表达式两边不要输入斜杠 “ / ”
3.6 预定义类及座机号码、表单验证案例
3.6.1 预定义类(也称元字符)
指某些常见模式的简写方式。
预定义类 | 说明 |
---|---|
\d
|
数字。匹配0-9之间的任意数字,相当于[ 0-9 ] |
\D
|
非数字。匹配0-9以外的字符,相当于[ ^0-9 ] |
\w
|
匹配任意的字母、数字和下划线,相当于[a-zA-Z0-9_] |
\W
|
除所有字母、数字和下划线以外的字符,相当于[ ^a-zA-Z0-9_] |
\s
|
验证是否为空:匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f] |
\S
|
匹配非空格的字符,相当于[ ^\t\r\n\v\f] |
3.6.2 座机号码验证案例
全国座机号码,三种格式:010-12345678、0760-1234567、0755-12345678
var reg = /^\d{3}-\d{8}|\d{4}-\d{7,8}$/; //或
var reg = /^\d{3,4}-\d{7,8}$/;
上面两种正则的效果相同。第一种用了或 “|
” 的表示方法。
注意,在正则里,“或” 用单竖线 “
|
” 表示。
3.6.3 表单验证案例
分析:
- 手机号码正则:
/^1[3|4|5|7|8]\d{9}$/
- QQ:
[1-9][0-9]{4,}
(腾讯QQ号从10000开始) - 昵称是中文:
^[\u4e00-\u9fa5]{2,8}$
{4,}
:至少出现4次
4. 正则表达式中的替换及敏感词过滤案例
4.1 replace 替换
replace()
方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或是一个正则表达式。
语法结构:
stringObject.replace(regexp/substr,replacement)
参数说明:
regexp/substr
:被替换的字符串,或者正则表达式;
replacement
:替换为的字符串;
返回值
:是一个替换完毕的新字符串。
应用示例:
示例一: 普通替换
var str='andy和red';
var newStr = str.replace('andy','baby')
console.log(newStr) // 打印输出 baby和red
示例二:正则式替换(敏感词过滤)
HTML结构:
<textarea name="" id="message"></textarea> <button>提交</button>
<div></div>
CSS样式:
<style>textarea {width: 300px;height: 100px;border: 1px solid #ccc;}
</style>
JavaScript 代码:
<script>var text = document.querySelector('textarea');var btn = document.querySelector('button');var div = document.querySelector('div');btn.onclick = function() {div.innerHTML = text.value.replace(/激情/,'**');}
</script>
注意:一般情况下,replace
只能替换第一个满足条件的字符串。这时,就要利用到正则表达式的参数
4.2 正则表达式参数
语法规范:
/表达式/[switch]
参数switch
(也称为修饰符) 用来限定按照什么样的模式来匹配。它有三种值:
g
:全局匹配(global 的缩写);i
:忽略大小写(ignore 的缩写);gi
:全局匹配 + 忽略大小写。
因此,对上面敏感词替换的代码添加g
,最终完善如下:
<script>var text = document.querySelector('textarea');var btn = document.querySelector('button');var div = document.querySelector('div');btn.onclick = function() {div.innerHTML = text.value.replace(/激情/g,'**');}
</script>
这样,对于文本中多次出现的敏感词均能替换,弥补了replace
本身的不足。
5. 常用正则表达式
5.1 数字校验
数字:
^[0-9]*$
n
位的数字:^\d{n}$
至少
n
位的数字:^\d{n,}$
m-n
位的数字:^\d{m,n}$
零和非零开头的数字:
^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
带
1-2
位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
有
2
位小数的正实数:^[0-9]+(.[0-9]{2})?$
有
1~3
位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:
^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
非零的负整数:
^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$
非负整数:
^\d+$ 或 ^[1-9]\d*|0$
非正整数:
^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非负浮点数:
^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
非正浮点数:
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
正浮点数:
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数:
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数:
^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
5.2 字符校验
汉字:
^[\u4e00-\u9fa5]{0,}$
英文和数字:
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
长度为
3-20
的所有字符:^.{3,20}$
由26个英文字母组成的字符串:
^[A-Za-z]+$
由26个大写英文字母组成的字符串:
^[A-Z]+$
由26个小写英文字母组成的字符串:
^[a-z]+$
由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
由数字、26个英文字母或者下划线组成的字符串:
^\w+$ 或 ^\w{3,20}$
中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
可以输入含有
^%&’,;=?$\”
等字符:[^%&',;=?$\x22]+
- 禁止输入含有
~
的字符:[^~\x22]+
5.3 特殊需求处理
Email
地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL
:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手机号码:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):
^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$
国内电话号码(0511-4405222、021-87888822):
\d{3}-\d{8}|\d{4}-\d{7}
身份证号(
15
位、18
位数字):^\d{15}|\d{18}$
短身份证号码(数字、字母
x
结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
```javascript
^[a-zA-Z]\w{5,17}$
```
<br>
- 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
```javascript
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
```
<br>
- 日期格式:
```javascript
^\d{4}-\d{1,2}-\d{1,2}
```
<br>
- 一年的
12
个月(01~09
和1~12
):
```javascript
^(0?[1-9]|1[0-2])$
```
- 一个月的
31
天(01~09
和1~31
):
```javascript
^((0?[1-9])|((1|2)[0-9])|30|31)$
```
- 钱的输入格式:
有四种钱的表示形式我们可以接受:”`10000.00`″ 和 “`10,000.00`″, 和没有 “`分`” 的 “`10000`″ 和 “`10,000`″:
```javascript
^[1-9][0-9]*$
```这表示任意一个不以`0`开头的数字。但是,这也意味着一个字符”`0`″不通过,所以我们采用下面的形式:
```javascript
^(0|[1-9][0-9]*)$
```
<br>一个`0`或者一个不以`0`开头的数字,我们还可以允许开头有一个负号:
```javascript
^(0|-?[1-9][0-9]*)$
```
这表示一个`0`或者一个可能为负的、开头不为`0`的数字,让用户以`0`开头好了,把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:
```javascript
^[0-9]+(.[0-9]+)?$
```
必须说明的是,小数点后面至少应该有`1`位数,所以”`10.`”是不通过的,但是 “`10`″ 和 “`10.2`″ 是通过的:
```javascript
^[0-9]+(.[0-9]{2})?$
```
<br>这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:
```javascript
^[0-9]+(.[0-9]{1,2})?$
```
<br>这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样:
```javascript
^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
```
<br>`1`到`3`个数字,后面跟着任意个逗号(`,`) +`3`个数字,逗号(`,`)成为可选,而不是必须:
```javascript
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
```
备注:这就是最终结果了,别忘了”`+`”可以用”`*`”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)。最后,别忘了在用函数时去掉去掉那个反斜杠(`\`),一般的错误都在这里
xml
文件:
```javascript
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
```
- 中文字符的正则表达式:
```javascript
[\u4e00-\u9fa5]
```
- 双字节字符(包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计
2
,ASCII字符计1)):
```javascript
[^\x00-\xff]
```
- 空白行的正则表达式(可以用来删除空白行):
```javascript
\n\s*\r
```
HTML
标记的正则表达式(网上流传的版本太糟糕,下面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力):
```javascript
<(\S*?)[^>]*>.*?|<.*? />
```
<br>
- 首、尾空白字符的正则表达式(可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式):
```javascript
^\s*|\s*$或(^\s*)|(\s*$)
```
<br>
- 腾讯QQ号(从10000开始):
```javascript
[1-9][0-9]{4,}
```
<br>
- 中国邮政编码(中国邮政编码为
6
位数字):
```javascript
[1-9]\d{5}(?!\d)
```
<br>
- IP地址(提取
IP
地址时有用):
```javascript
\d+\.\d+\.\d+\.\d+
```
<br>
- IP地址:
```javascript
((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
```
<br>
- 文件名检验(不能用于文件名的非法字符,包括水平制表符换行符回车符等):
```javascript
"[\|\/\<\>"":\*\\\?\t\v\n\r\f]"
```
<br>**VBA 函数示例**:
```vbnet
Function FileNameNorm(ByVal mStr As String)Set regex = CreateObject("vbscript.regexp")regex.Global = Trueregex.IgnoreCase = Falseregex.Pattern = "[\|\/\<\>"":\*\\\?\t\v\n\r\f]"FileNameNorm = regex.Replace(mStr, "")Set regex = Nothing
End Function
```
- 正则匹配比较运算符 !=、<=、>=、==、<、>
区分大小写,匹配字符串的开头,示例如下:
var pattern = /^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)? /,str = '>=300';
console.log(pattern.test(str));
上一篇:JavaScript从入门到放弃 -(五)函数进阶(高级用法)
下一篇:JavaScript从入门到放弃 -(七)ES6
JavaScript从入门到放弃 -(六)正则表达式相关推荐
- JavaScript从入门到放弃 -(七)ES6
目录 1. ES6相关概念 1.1 什么是 ES6 ? 1.2 为什么使用 ES6 ? 2 ES6新增语法 2.1 新增关键字 2.1.1 let 关键字 小结 2.1.2 const 关键字 小结 ...
- JavaScript从入门到放弃 -(五)函数进阶(高级用法)
目录 1. 函数的定义和调用 1.1 函数定义的3种方式 1.2 函数调用方式(常见的6种) 1.2.1 普通函数的调用 1.2.2 对象中的函数调用 1.2.3 构造函数的调用 1.2.4 DOM元 ...
- JavaScript从入门到放弃 -(四)E5 新增方法
目录 5. trim方法 6. 对象方法 6.1 Object.keys() 6.1.1 作用 6.1.2 语法 6.2 Object.defineProperty() 6.2.1 作用 6.2.2 ...
- JavaScript从入门到放弃 -(三)ES5新增方法及商品查询案例
目录 1. ES5新增方法概述 2. 数组方法 2.1 forEach方法 2.2 filter 筛选数组方法 2.3 some方法 3. 查询商品案例 3.1 HTML结构和CSS样式 3.2 准备 ...
- JavaScript从入门到放弃 -(二)继承
目录 1. Call() 2.子构造函数继承父构造函数中的属性 3. 借用原型对象继承方法 1. Call() 它的作用是: call()可以调用函数: call()可以修改函数运行时this的指向: ...
- JavaScript从入门到放弃 - (一)构造函数和原型
目录 1. 创建对象的三种方式 1.1 用字面量创建 1.2 用new关键字创建 1.3 借用构造函数创建 2. 实例成员和静态成员 2.1 实例成员 2.2 静态成员 3 构造函数原型 4 对象原型 ...
- JavaScript从入门到放弃到精通
JavaScript从入门到放弃 1.什么是JS 是一种流行的脚本语言, Java和JS没有什么关系 1.2环境 1.3调试 运行html 控制台调试 console.log()变量打印输出 断点 2 ...
- System Generator从入门到放弃(六)-利用Vivado HLS block实现VivadoHLS调用C/C++代码
System Generator从入门到放弃(六)-利用Vivado HLS block实现Vivado HLS调用C/C++代码 夜未央,流星落,情已殇 文章目录 System Generator从 ...
- JavaScript从入门到放弃 - ES6中的对象和类
重点讲解Tab栏切换.增.删.改 1. 面向过程与面向对象 2.ES6 中的对象与类 2.1 对象 2.2 类 2.2.1 创建类 2.2.1.1 语法 2.2.1.2 实例 2.2.2 类创建添加属 ...
最新文章
- 270亿参数、刷榜CLUE,阿里达摩院发布最大中文预训练语言模型PLUG(开放测试)...
- php fpm是干嘛的,php-fpm是什么?
- 有关数据治理的本质及实践,看这一篇就够了【转】
- python集合类型_python集合类型介绍
- 管中窥“视频”,“理解”一斑 —— 视频理解概览
- 分计算iv值_筛选变量的指标—IV值
- mysql判断是否为null_MySQL如何判断字段是否为null
- html中的声明的作用域,Html/CSS 作用域
- mssql 性能优化的一些认识
- JSTARS投稿学习笔记
- nx编译安装车牌检测库hyperlpr
- tp6导出Excel表格
- c语言编程解百马百瓦古题,java编程题90道.doc
- 磁盘满了,却找不到大文件
- 2021 | 官方NOI系列活动已经出来啦~
- KSO-.NET 6 中的新增功能
- Unity替换 图集
- win7系统调用tts的语音朗读功能
- m3u8的视频下载以及.ts文件解密
- ant-design中form组件的item在typescript环境下自定义提示文字(Form.Item的tooltip属性)及提示图标