「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
在我们日常项目开发中,经常用到正则表达式,正则表达式就是用一些特殊的符号(元字符)来代表具有某种特征(如,某一字符必须是数字字符)的一组字符以及指定匹配的的次数,含有元字符的文本不再表示某一具体的文本内容,而是形成了一种文本模式,可以匹配符合该模式的所有文本串。
作用
- 判断字符串的格式
- 用来替换文本
- 提取特定字符串
普通字符
包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号
字符 | 描述 |
---|---|
[ABC] | 匹配[...]的字符 |
[^ABC] | 匹配除了[...]的字符 |
[A-Z] | 匹配所有大写字母,[a-z]匹配所有小写字母 |
. | 匹配除换行符之外的任何单个字符 |
[\s\S] | 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。 |
\w | 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] |
特殊字符
若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。
字符 | 描述 | |
---|---|---|
$ | 匹配输入字符串的结尾位置 | |
() | 标记一个子表达式的开始和结束位置 | |
* | 匹配前面的子表达式零次或多次。 | |
+ | 匹配前面的子表达式一次或多次 | |
. | 匹配除换行符 \n 之外的任何单字符 | |
[ | 标记一个中括号表达式的开始 | |
? | 匹配前面的子表达式零次或一次 | |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符 | |
匹配输入字符串的开始位置 | ||
{ | 标记限定符表达式的开始 | |
指明两项之间的一个选择 |
限定符
字符 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | n 是一个非负整数。匹配确定的 n 次 |
{n,} | n 是一个非负整数。至少匹配n 次 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次 |
定位符
字符 | 描述 |
---|---|
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
\b | 匹配一个单词边界 |
\B | 非单词边界匹配 |
选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔
修饰符
g 全局匹配 查找字符串中所有的匹配项
var str = "baidu taobao baidu";
var n1 = str.match(/baidu/); // 查找第一次匹配项
var n2 = str.match(/baidu/g); // 查找所有匹配项
i 不区分大小写匹配
var str = "baidu taobao Baidu";
var n1 = str.match(/baidu/); // 区分大小写
var n2 = str.match(/baidu/gi); // 不区分大小写
m 修饰符
可以使 ^ 和 $ 匹配一段文本中每行的开始和结束位置 g 只匹配第一行,添加 m 之后实现多行。
var str = "baidugoogle\ntaobao\nrunoobweibo";
var n1 = str.match(/^baidu/g); // 匹配一个
var n2 = str.match(/^baidu/gm); // 多行匹配
s 修饰符
默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 之后, . 中包含换行符 \n。
var str = "google\nrunoob\ntaobao";
var n1 = str.match(/google./); // 没有使用 s,无法匹配\n
var n2 = str.match(/runoob./s); // 使用 s,匹配\n
常用的正则表达式
- 所有包含一个以上的字母、数字或下划线的字符串
^[a-zA-Z0-9_]+$
- 所有的正整数
^[1-9][0-9]*$
- 所有的整数
^-?[0-9]+$
- 所有的浮点数
^[-]?[0-9]+(.[0-9]+)?$
- 邮箱正则
var str = "abcd test@runoob.com 1234";
var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g; document.write(str.match(patt1));
- 只允许输入数字(整数:小数点不能输入)
<input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" >
- 允许输入小数(两位小数)
<input type="text" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" >\
- 允许输入小数(一位小数)
<input type="text" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,1})?).*$/g, '$1')" >\
- 开头不能为0,且不能输入小数
<input type="text" onkeyup="value=value.replace(/[^\d]/g,'').replace(/^0{1,}/g,'')" >