下面是“一篇文章搞懂JavaScript正则表达式之方法”的完整攻略:
什么是正则表达式
正则表达式(Regular Expression,regex,RegExp)是一种用来进行字符串匹配的工具。它通过一些特定字符的组合和描述规则来匹配文本中的字符序列。JavaScript 中使用正则表达式同样非常方便。
创建正则表达式
在 JavaScript 中,有两种常见的方式来创建正则表达式:
- 字面量方式
使用斜杠(/)包括正则表达式的模式,后面可以跟一些修饰符。例如:
let pattern = /hi/gi;
这个正则表达式的模式是“hi”,修饰符“gi”表示全局匹配和忽略大小写。
- 构造函数方式
使用 RegExp 对象来创建正则表达式,传入参数是正则表达式的模式和修饰符。例如:
let pattern = new RegExp("hi", "gi");
匹配字符串
要使用正则表达式对字符串进行匹配,可以使用 String 对象的 match() 方法。它会返回一个数组,数组的元素就是匹配到的结果。例如:
let pattern = /hi/gi;
let str = "Hi,How are you? hi";
let result = str.match(pattern);
console.log(result);
结果输出:["Hi", "hi"]
正则表达式元字符和特殊字符
正则表达式的基础是元字符和特殊字符。其中,元字符(也称为原义字符)代表了自身,特殊字符则有特殊含义,并不代表自身。下面列出一些常见的元字符和特殊字符:
字符 | 说明 |
---|---|
. | 匹配除了换行符以外的任意字符 |
\w | 匹配任意字母、数字、下划线 |
\W | 匹配除了字母、数字、下划线以外的任意字符 |
\d | 匹配任意数字 |
\D | 匹配除了数字以外的任意字符 |
\s | 匹配任意空白字符(包括空格、制表符和换行符等) |
\S | 匹配除了空白字符以外的任意字符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
\b | 匹配单词的边界 |
\B | 匹配不在单词边界的位置 |
贪婪匹配和非贪婪匹配
在正则表达式中,*、+ 和 ? 这三个元字符都是贪婪匹配的,会尽可能多地匹配字符。如果想要改成非贪婪匹配,需要在这三个元字符后面加上 ?,例如:
let str = "aa<a>bb<a>cc";
console.log(str.match(/<.+?>/g));
结果输出:["<a>", "<a>"]
示例
例子一
假设有一个电话号码格式为 0517-88888888(其中 0517 代表区号,8 个数字表示电话号码),要从一段文本中提取出这样格式的电话号码,可以使用正则表达式。
let str = '这是我的电话号码:0517-88888888,请联系我!';
let pattern = /\d{4}-\d{8}/;
let result = str.match(pattern);
console.log(result);
结果输出:["0517-88888888"]
例子二
假设有一段文本,其中有多个人名,要从中根据一定的规则提取人名前的称呼,例如:
李小明先生、王小丽女士,您好!
可以使用正则表达式 /[\u4e00-\u9fa5]{2,4}(?=先生|女士)/g
来匹配。
其中 [\u4e00-\u9fa5] 匹配汉字,{2,4} 表示匹配两到四个汉字,(?=先生|女士) 表示仅当后面有“先生”或“女士”之一的时候才匹配。
let str = '李小明先生、王小丽女士,您好!';
let pattern = /[\u4e00-\u9fa5]{2,4}(?=先生|女士)/g;
let result = str.match(pattern);
console.log(result);
结果输出:["李小明", "王小丽"]
以上就是“一篇文章搞懂JavaScript正则表达式之方法”的完整攻略,希望可以帮助到你。