正则表达式
下面讲一下JS正则表达式。
正则表达式构造方式:
1.第一种使用字面量,推荐
const regex = /abc/ig
格式就是以/开始和结束的字面常量,结束后面可以跟参数:
i:忽略大小写;g:全字符串匹配,不会匹配一个之后就结束;
2.第二种使用构造函数来创建正则表达式(es6新特性)
const regex = newRegExp("abc","ig");
普通字符
指使用的字母、数字、下划线和一些符号等;
元字符(拥有特殊含义)
如果想要匹配元字符本身,则需要使用/进行转义。
-
锚字符
^,$,定位,不匹配文本:^:字符串开头;$:字符串结尾;
/^abc123/.test("abc") //true /abc123$/.test("123") //true /^abc123$/.test("abc123")//true,只能匹配abc123这样的字符串,其前面和后面都不能有字符 -
字符类
[]可以使用
[]来表示一个字符集合,只要满足其中一个就算匹配:/a[bcd]e/ abe,ace,ade✔如果使用相同类型且连续情况下,可以使用
-字符:[a-z0-9A-Z]还可以使用
^字符取集合类的补集:[^0-9] //非数字类 -
预定义字符类
.:匹配任意个单字符;\d:数字[0-9];\D:非数字[^0-9];\w:单词字符[A-Za-z0-9_]\W:非单词字符\s:空白字符(空格、制表符、换行)\S:非空白字符/\d/.test("6"); //true /\w/.test("_"); //true -
量词(控制前面字符出现次数)
-
*:≥0 次(0 次、1 次、多次) -
+:≥1 次(至少出现 1 次) -
?:0 次 或 1 次(可有可无) -
{n}:恰好 n 次 -
{n,}:至少 n 次 -
{n,m}:n ~ m 次
默认贪婪匹配;量词后加
?开启非贪婪:+?*? -
-
分组
()- 把多个字符当成整体
- 捕获组,匹配内容可以提取
const reg = /(ab)+/; reg.test("ababab"); //true ab整体重复多次 -
选择符
|/a|b/.test("a"); //匹配a或者b /(abc|123)/.test("123"); -
常用正则方法
reg.test(str):返回布尔值,判断是否能匹配;reg.exec(str):返回匹配结果数组,捕获内容存储在数组中,无匹配返回null,匹配成功就停止;- 字符串方法配合正则:
str.match(reg)获取匹配成功的子串;str.replace(reg,新内容)用新内容替换所有被匹配成功的地方;
正则表达式练习
1.手机号的正则表达式:
/^1[3456789]\d{9}$/
2.邮箱正则表达式:
/^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[a-zA-Z0-9_-]+)$/
Java中使用正则表达式规则差不多:
package com.alij.jdk8_quick_stater.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regexDemo1 {
public static void main(String[] args) {
String regex = "1[3456789]\\d{9}";
//预编译,提升性能,适合于多次查找正则表达式
Pattern pattern = Pattern.compile(regex);
String content = "phone1:13542835693,phone2:14787649865";
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
String phone = matcher.group();
System.out.println(phone);
}
}
}
Matcher 关键方法区分(极易混淆)
matches()
全部字符串严格匹配,等同于正则加上^正则$
matcher.matches();
-
find()
查找字符串中是否存在子串满足规则(搜索包含匹配),循环获取多个结果 -
group()捕获组
group()=group(0):获取整体匹配内容group(1):获取第1个括号捕获内容,依次类推
捕获组示例:
Pattern p = Pattern.compile("(\\d{4})-(\\d{2})");
Matcher m = p.matcher("2026-07");
if(m.find()){
System.out.println(m.group(0)); //2026-07
System.out.println(m.group(1)); //2026
System.out.println(m.group(2)); //07
}
正则元字符【和JS基本一致,注意Java转义】
通用规则和JS正则相同:
^ $ . * + ? | () [] {} \d \w \s
重点提醒:
✅ JS写法:\d
✅ Java字符串:"\\d"
✅ 如果要匹配字面量 \,Java需要写 "\\\\"
示例:匹配小数
// 匹配 3.14 . 需要转义 \\.
Pattern.compile("\\d+\\.\\d+");
Java独有:Pattern 修饰符(等价JS修饰符)
编译时传入标志位
// Pattern.CASE_INSENSITIVE = 忽略大小写(等价JS i)
Pattern pattern = Pattern.compile("abc", Pattern.CASE_INSENSITIVE);
常用标志:
Pattern.CASE_INSENSITIVE忽略大小写Pattern.MULTILINE多行模式^$匹配每行(等价m)Pattern.DOTALL.匹配换行符(等价JS s修饰符)

浙公网安备 33010602011771号