正则表达式

正则表达式的构成:

  • 定界符

  • 元字符

  • 模式修正符

  • 表达式

定界符

定界符常使用斜线"/" 左斜杠 正斜杠 / / 元字符 /[修饰符] g

元字符

元字符为具有特殊含义的字符 主要用途:

  • 定义原子的筛选方式

  • 定义原子的集合

  • 定义原子数量限定

  • 定义边界控制

元字符之原子的筛选方式

|--------|-------------------------------------|
| 筛选方式 | 含义描述 |
| | | 指明两项之间的一个选择 |
| [] | 匹配方括号中的任意一个原子 |
| [^] | 匹配除方括号中原子之外的任意字符 |
| - | 连接符,,只能在 [ ] 中使用 |
| ( ) | 匹配其整体为一个原子,即模式单元。可以理解为由多个单个原子组成的大原子 |

javascript 复制代码
// 匹配字母
console.log(str.match(/r/));
console.log(str.match(/l/g));
console.log(str.match(/e|r/g));  // | 表示或
console.log(str.match(/2/g));
// 匹配所有的数字
console.log(str.match(/0|1|2|3|4|5|6|7|8|9/g));
console.log(str.match(/2|lo/g));
// [] 的使用
console.log(str.match(/[2|7|27]/g));
console.log(str.match(/[0123456789]/g));
// [^] 除。。。以外
console.log(str.match(/[^1234567890]/g));
console.log(str.match(/[^abcdefghij]/g));
// - 连接符,表示一个范围,前后都包含
console.log(str.match(/[^0-9]/g));
console.log(str.match(/[5-9]/g)); // 匹配数字 5-9
console.log(str.match(/[a-zA-Z0-9]/g));
console.log(str.match(/[a-zA-Z0-9_]/g)); // 匹配数字字母下划线
console.log(str.match(/[5-p]/g)); // 按照ascii编码进行匹配

元字符之原子的集合

|-----|--------------------------------------------------------------------------------|
| 集合 | 含义描述 |
| . | 查找单个字符,除了换行和结束符。 [ ^\n\r] |
| \d | 匹配0-9的数字,相当于[0-9] |
| \D | 匹配除0-9之外的任意字符,相当于[ ^0-9 ] |
| \s | 匹配一个空白字符,相当于[\f\n\r\t\v ] |
| \S | 匹配一个非空白字符,相当于[ ^\f\n\r\t\v ] |
| \w | 匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z _]匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z _] |
| \W | 匹配任意一个非数字、大小写字母和下划线字符,相当于[ ^0-9a-zA-Z ] |

javascript 复制代码
var str = "he12341llo21 world562 http://789455ww78w.baidu.com3";
// 原子的集合
// 注意:在匹配一些特殊的字符串的时候[ / . ]  需要添加转义字符 \
console.log(str.match(/:/g));
console.log(str.match(/\/|\./g));
console.log(str.match(/\d/g)); // 所有的数字 ok
console.log(str.match(/\D/g)); // 所有的非数字
console.log(str.match(/\s/g)); // 所有空字符
console.log(str.match(/\S/g)); // 所有非空字符 ok
console.log(str.match(/\w/g)); // 数字字母下划线 ok
console.log(str.match(/\W/g)); // 除了数字字母下划线

元字符之原子数量限定

|-------|--------------------------|
| 数量限定 | 含义描述 |
| {n} | 其前面的原子连续出现n次 |
| {n,} | 其前面的原子至少连续出现n次 |
| {n,m} | 其前面的原子连续出现n到m次 |
| + | 匹配任何包含至少一个 n 的字符串。{1,} |
| * | 匹配任何包含零个或多个 n 的字符串。{0,} |
| ? | 匹配任何包含零个或一个 n 的字符串。{0,1} |

javascript 复制代码
// 规定设置多少个字母
// {n} 出现n次
console.log(str.match(/\d{3}/g));
// {n,} 出现n到正无穷
console.log(str.match(/\d{2,}/g));
// {n,m} 出现n到m次,都能匹配到
console.log(str.match(/\d{2,5}/g));
// +
console.log(str.match(/\d+/g)); // {1,}
// * 匹配0个或者多个
console.log(str.match(/\d*/g)); // {1,}
// ? 可有可无,有的话只能有1个
console.log(str.match(/\d?/g)); // {1,}

贪婪匹配 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配 非贪婪匹配:就是匹配到结果就好,就少的匹配字符 (.+)默认是贪婪匹配 (.+?)为惰性匹配

javascript 复制代码
var str = 'apcdefc';
console.log(str.match(/^a.+c/)); // 贪婪匹配,从a匹配到最后一个c
console.log(str.match(/^a.+?c/)); // 取消贪婪匹配(惰性匹配)

元字符之边界控制

|------|--------------------------|
| 边界控制 | 含义描述 |
| ^ | 写在正则表达式最前面表示必须以什么开始 |
| $ | 写在正则表达式最后表示必须以什么结束 |
| \b | 匹配单词边界 This is an island |
| \B | 匹配非单词边界 |

javascript 复制代码
// ^ 以。。。开头
var reg = /^[a-zA-Z]{1}\w*$/;
var str ='w345234sdf';
// 需求:必须以字母开头,后面 必须 可以是数字字母_,
console.log( reg.test(str));
// \b \B 匹配单词边界和非单词边界
var str = "This is an island";
console.log(str.search(/\bis/));
console.log(str.search(/is\b/));
console.log(str.search(/\bis\B/));
console.log(str.match(/is/g));

模式修饰符

|----|------------------------------|
| 量词 | 含义描述 |
| i | 执行对大小写不敏感的匹配。 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |

javascript 复制代码
// i 不区分大小写, g 全局匹配
var str = 'ywr9yh3rhyFRE91h';
console.log(str.match(/[a-zA-Z]/g));
console.log(str.match(/[a-z]/gi));
// m 多行匹配  
var str = 'hello world \nhello jack';
console.log(str.match(/^he/g)); // 只匹配第一个he
console.log(str.match(/^he/gm));// 会自动对换行之后的he进行匹配,会匹配到两个he

使用RegExp创建正则表达式对象

new RegExp(pattern, attributes); pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。

javascript 复制代码
var reg = RegExp(/\d/,'g'); // 匹配所有的数字,并且是全局匹配
var reg = RegExp('1','g'); // 匹配数字1,并且全局匹配
console.log(str1.match(reg));

使用 RegExp(正则表达式) 对象的方法

bool RegExpObject.test(string) 检索字符串是否匹配。 返回 true 或 false

javascript 复制代码
var reg = /^1([3-8]){1}\d{9}$/;
alert(reg.test(13837160809));

array RegExpObject.exec(string) 检索字符串中指定的值。 返回找到的值,并确定其位置。 注意:当使用exec有g全局匹配的时候,才会自动进行while循环遍历

javascript 复制代码
 var str = "I like to eat apples, and my name is apple";
 var reg = new RegExp("apple","g");
 var result;
 while(result = reg.exec(str)){
    alert(result);
     alert(reg.lastIndex);
 }

支持正则表达式的 String 对象的方法

array stringObject.match(regexp) 检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次

javascript 复制代码
var str="1 plus 2 equal 3";
document.write(str.match(/\d+/g))

string stringObject.replace(regexp,replacement) 替换 在正则中:()包括起来,那么就产生了一个模式单元,模式单元使用 $num

javascript 复制代码
name = "jack, Rose";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

array stringObject.split(separator,howmany) 分割成数组

javascript 复制代码
var str="How1are2 you 3doing 7today?";
alert(str.split(/\s+/));

int stringObject.search(regexp) 检索字符串中第一个与 regexp 相匹配的子串的起始位置。 如果没有找到任何匹配的子串,则返回 -1。

javascript 复制代码
var str="I'm studying web前端!"
document.write(str.search(/web/i))
相关推荐
zwjapple22 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
licy__1 天前
正则表达式语法详解(python)
数据库·mysql·正则表达式
风动也无爱1 天前
Java的正则表达式和爬虫
java·爬虫·正则表达式
运维小文2 天前
linux中的特殊符号
linux·正则表达式·shell·linux命令
南暮思鸢2 天前
强大的正则表达式——Hard
web安全·网络安全·正则表达式·交互式·write up·ctf比赛·hackergame 2024
赶紧回家去2 天前
正则表达式常用字符
正则表达式
白萝卜弟弟2 天前
【JAVA】正则表达式中的正向肯定预查
java·正则表达式
高锰酸钾_2 天前
Java 正则表达式详解及实用案例
java·正则表达式
追梦不止~2 天前
正则表达式
正则表达式
shidouyu3 天前
前端框架主要做些什么工作
javascript·css·ajax·正则表达式·json·firefox·jquery