js正则表达式

76 阅读2分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

在我们日常项目开发中,经常用到正则表达式,正则表达式就是用一些特殊的符号(元字符)来代表具有某种特征(如,某一字符必须是数字字符)的一组字符以及指定匹配的的次数,含有元字符的文本不再表示某一具体的文本内容,而是形成了一种文本模式,可以匹配符合该模式的所有文本串。

作用

  1. 判断字符串的格式
  2. 用来替换文本
  3. 提取特定字符串

普通字符

包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号

字符描述
[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

常用的正则表达式

  1. 所有包含一个以上的字母、数字或下划线的字符串
^[a-zA-Z0-9_]+$ 
  1. 所有的正整数
^[1-9][0-9]*$ 
  1. 所有的整数
^-?[0-9]+$ 
  1. 所有的浮点数
^[-]?[0-9]+(.[0-9]+)?$
  1. 邮箱正则
var str = "abcd test@runoob.com 1234"; 
var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g; document.write(str.match(patt1));
  1. 只允许输入数字(整数:小数点不能输入)
<input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" >
  1. 允许输入小数(两位小数)
<input type="text" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" >\
  1. 允许输入小数(一位小数)
<input type="text" onkeyup="value=value.replace(/^\D*(\d*(?:\.\d{0,1})?).*$/g, '$1')" >\
  1. 开头不能为0,且不能输入小数
<input type="text" onkeyup="value=value.replace(/[^\d]/g,'').replace(/^0{1,}/g,'')" >