正则表达式
创建正则表达式
- 使用一个正则表达式字面量
1
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
- 调用RegExp对象的构造函数
1
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 非单词边界
正向匹配与反向匹配
(?:pattern)
匹配pattern但不获取匹配结果,这是一个非获取匹配,不进行存储供以后使用。
(?=pattern)
正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。
(?!pattern)
正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。
(?<=pattern)
反向肯定预查,与正向肯定预查类似,只是方向相反。
(?<!pattern)
反向否定预查,与正向否定预查类似,只是方向相反。
使用正则表达式的方法
- exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
- test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
- match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
- search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
- replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
- split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。
练习
匹配结尾的数字
1 | /\d+$/g |
统一空格个数
字符串内如有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。
1 | let reg = /\s+/g |
判断字符串是不是由数字组成
1 | str.test(/^\d+$/); |
电话号码正则
- 区号必填为3-4位的数字
- 区号之后用“-”与电话号码连接电话号码为7-8位的数字
- 分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
1
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/
手机号码正则表达式
正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。
1 | /^0*1(3|5)\d{9}$/ |
使用正则表达式实现删除字符串中的空格
1 | funtion trim(str) { |
限制文本框只能输入数字和两位小数点等等
1 | /^\d*\.\d{0,2}$/ |
只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./)
1 | /^[a-z\.:\/\\]*$/ |
替换小数点前内容为指定内容
例如:infomarket.php?id=197 替换为 test.php?id=197
1 | var reg = /^[^\.]+/; |
只匹配中文的正则表达式
1 | /[\u4E00-\u9FA5\uf900-\ufa2d]/ig |
返回字符串的中文字符个数
先去掉非中文字符,再返回length属性。
1 | function cLength(str){ |
正则表达式取得匹配IP地址前三段
只要匹配掉最后一段并且替换为空字符串就行了
1 | function getPreThrstr(str) { |
匹配
- 与
1 | /<ul>[\s\S]+?</ul>/i |
用正则表达式获得文件名
c:\images\tupian\006.jpg
可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。
首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。
1 | function getFileName(str){ |
绝对路径变相对路径
“http://23.123.22.12/image/somepic.gif"转换为:"/image/somepic.gif"
1 | var reg = /http:\/\/[^\/]+/; |
用户名正则
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。
1 | /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/ |
匹配英文地址
规则如下:
包含 “点”, “字母”,”空格”,”逗号”,”数字”,但开头和结尾不能是除字母外任何字符。
1 | /^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/ |
正则匹配价格
开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。
1 | /^\d+(\.\d{2})?$/ |
身份证号码的匹配
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字
1 | /^(\d{14}|\d{17})(X|x)$/ |
单词首字母大写
每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea
1 | function firstCharUpper(str) { |
正则验证日期格式
yyyy-mm-dd格式
4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。
1 | /^\d{4}-\d{1,2}-\d{1,2}$/ |
去掉文件的后缀名
www.abc.com/dc/fda.asp 变为 www.abc.com/dc/fda
1 | function removeExp(str) { |
验证邮箱的正则表达式
开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者
多个组合。
1 | /^[\w-]+@\w+\.\w+$/ |
正则判断标签是否闭合
例如:<img xxx=”xxx” 就是没有闭合的标签;
p的内容,同样也是没闭合的标签。
标签可能有两种方式闭合, 或者是
xxx
。1 | /<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i |
正则判断是否为数字与字母的混合
不能小于12位,且必须为字母和数字的混
1 | /^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i |
将阿拉伯数字替换为中文大写形式
1 | function replaceReg(reg,str){ |
去掉标签的所有属性
1 | /(<td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(>)/ |