JavaScript 使用正则表达式
正则表达式(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。而在网站开发中,正则表达式可以说也是经常会用到,例如用户注册时,为了确保用户输入的用户名和密码符合要求,就需要用正则表达式来匹配验证。而在用户发布文章或评论时,也需要用正则表达式来过滤一些铭感词或不文明词。
因为正则表达式比较复杂,一篇博客也很难说清楚,所以这里主要写的还是 JavaScript 使用正则表达式的一些函数和方法。
RegExp 写法
在 JavaScript 中,正则表达式需要用两个斜杠包裹,也就是把正则表达式写在两个斜杠的中间,下面是一个匹配 baidu
的正则表达式:
var re = /baidu/;
上面的写法其实是一种简写,还有一种完整的写法如下,同样是匹配 baidu
:
var re = new RegExp('baidu');
正则表达式是区分大小写的,如果要在匹配时忽略大小写就需要用到修饰符,例如我要匹配一个不区分大小写的 a
:
var re = /a/i;
后面的 i
就是修饰符,下面是一些修饰符说明:
修饰符 | 说明 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
RegExp 的第二个参数就是写修饰符的,下面还是一个不区分大小写的匹配 a
:
var re = new RegExp('a', 'i');
RegExp 方法
下面是一些 RegExp
的方法:
test()
方法 检索字符串中指定的值,传入要检索的字符,返回 true
或 false
,下面是代码演示:
var str = '404 not found'; // 字符串
var re = /404/; // 匹配404
var result = re.test(str); // 检索str的内容
console.log(result); // 在控制台输出结果
最终在控制台输出的结果为 true
。
exec
方法 检索字符串中指定的值。返回找到的值,并确定其位置。下面是代码演示:
var str = '中国移动10086'; // 字符串
var re = /\d/; // 匹配数字
var result = re.exec(str);
console.log(result); // 在控制台输出结果
上面的代码是匹配数字,非全局匹配,输出结果:
[
1,
index: 4,
input: "中国移动10086"
]
上面输出了匹配到的第一个数字、位置、匹配的字符串,如果使用全局匹配,也就是加 g
修饰符的话,每次调用后位置都会 +1,下面是代码:
var str = '中国移动10086'; // 字符串
var re = /\d/g; // 匹配数字
var result = []; // 用来保存结果
// 当结果为null时就会停止循环,因为如果exec匹配失败就会返回null
while (result != null) {
result = re.exec(str); // 执行匹配
if (result != null) { // 如果匹配成功
console.log(result); // 在控制台输出结果
}
}
输出结果:
[
1,
index: 4,
input: "中国移动10086"
]
[
0,
index: 5,
input: "中国移动10086"
]
[
0,
index: 6,
input: "中国移动10086"
]
[
8,
index: 7,
input: "中国移动10086"
]
[
6,
index: 8,
input: "中国移动10086"
]
上面输出了 5 个数组,分别是10086 的匹配结果,每次匹配位置都会往后增加。
string 方法
下面是一些支持正则表达式的 String
方法:
search()
方法 检索字符串中指定的子字符串, 或检索与正则表达式相匹配的子字符串,返回匹配成功的第一个字符的位置,下面是代码:
var str = '中国移动10086'; // 字符串
var re = /\d/; // 匹配数字
var result = str.search(re);
console.log(result); // 在控制台输出结果
控制台输出的结果为 4
,也就是第一个数字的位置,search
方法不支持正则表达式的 g
修饰符,无论调用多少次输出的结果都是一样的。
match()
方法 在字符串内检索指定的值, 或找到一个或多个正则表达式的匹配,匹配成功会返回一个数组,否则返回 null
。下面还是匹配数字的代码:
var str = '中国移动10086'; // 字符串
var re = /\d/; // 匹配数字
var result = str.match(re);
console.log(result); // 在控制台输出结果
这里没有使用 g
修饰符,下面是输出的结果:
[
1,
index: 4,
input: "中国移动10086"
]
输出的结果和 exec
方法的差不多,包括匹配到的第 1 个字符、第 1 个字符的位置、匹配的字符串,下面是使用全局匹配的结果:
[
1,
0,
0,
8,
6
]
加入 g
修饰符后输出了匹配到的所有字符。
replace()
方法 在字符串中用一些字符替换另一些字符, 或替换一个与正则表达式匹配的子串,返回替换后的字符串。下面是代码:
var str = '中国移动10086'; // 字符串
var re = /\d/; // 匹配数字
var result = str.replace(re, '*'); // 替换
console.log(result); // 在控制台输出结果
这里把数字替换为*,因为没有使用全局匹配,所以只会替换第1个数字,输出的结果为:中国移动*0086
,如果加入 g
修饰符的话,替换后输出的结果为:中国移动*****
。
split()
方法 把一个字符串分割成字符串数组,参数为分隔符字符或正则表达式,第二个参数为数组长度,可省略。下面是代码:
var str = 'java1PHP2Python3C#'; // 字符串
var re = /\d/g; // 匹配数字
var result = str.split(re); // 拆分
console.log(result); // 在控制台输出结果
上面的代码是用数字作为分隔符,下面是结果:
[
"java",
"PHP",
"Python",
"C#"
]
上面就是 JavaScript 中经常会用到的一些正则表达式的方法。
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/251/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。