深入学习JS正则表达式,掌握高效匹配技巧!
Javascript正则表达式是Web前端开发中不可或缺的技能。正则表达式是用于查找和替换文本的一种强大的文本处理工具。本篇文章将详细介绍Javascript正则表达式的基本语法、常见正则表达式元字符、某些特殊字符、以及在Javascript中如何应用正则表达式的知识,并分享一些实用的JS正则表达式的高效匹配技巧,助你轻松掌握JS正则表达式。
一、基本语法
在Javascript中,正则表达式可以通过RegExp对象来创建。RegExp对象有两种创建方式,一种是使用字面量形式(两斜杠),一种是使用构造函数。
1、字面量形式
var pattern = /pattern/;
2、构造函数
var pattern = new RegExp("pattern");
其中pattern表示要进行匹配的模式。
二、 常见正则表达式元字符
正则表达式中,%、&、$等为元字符,代表本身所代表的特殊含义。详细的元字符列表如下:
1、^:匹配输入字符串的开始位置。(匹配一行的开始)
2、$:匹配输入字符串的结束位置。(匹配一行的结束)
3、.:匹配除换行符以外的任何单个字符。
4、[ ]:定义一个字符集合。
例如:
[abc] 就表示匹配a或b或c。
[^abc] 就表示匹配除了a或b或c。
5、-:在字符集合内表示字符范围。
例如:
[a-z] 表示匹配小写字母a到z。
[A-Z] 表示匹配大写字母A到Z。
[0-9] 表示匹配数字0到9。
6、*: 表示匹配前面的元素0次或多次。
例如:
ab* 表示匹配字符a,后面有0个或多个字符b。
7、+:表示匹配前面的元素1次或多次。
例如:
ab+ 表示匹配字符a,后面有1个或多个字符b。
8、?:表示匹配前面的元素0次或1次。
例如:
ab? 表示匹配字符a,后面有0个或1个字符b。
9、( ):分组。
例如:
(a|b) 表示匹配字符a或b。
10、\:表示转义字符。
例如:
\d 表示匹配所有数字。
\w 表示匹配单词字符,包括数字、字母和下划线_(相当于[a-zA-Z0-9_])。
\s 表示匹配一个空格字符。
三、特殊字符
1、| 或
例如:
regexp = /a|b/gi;
console.log("abc".match(regexp)); // 输出 ["a"]
console.log("bab".match(regexp)); // 输出 ["b"]
2、^ 行首匹配
例如:
regexp = /^a/gi;
console.log("abc".match(regexp)); // 输出 ["a"]
console.log("bac".match(regexp)); // 输出 null
3、$ 行尾匹配
例如:
regexp = /a$/gi;
console.log("cba".match(regexp)); // 输出 ["a"]
console.log("bac".match(regexp)); // 输出 null
4、*? 最小匹配
例如:
regexp = /a.*?b/gi;
console.log("aaabbbaaaabbb".match(regexp)); // 输出 ["aab", "aaab"]
5、(?:...) 不分组
例如:
regexp = /(?:a|b)c/gi;
console.log("abc".match(regexp)); // 输出["bc"]
console.log("bbc".match(regexp)); // 输出["bc"]
四、Javascript中如何应用正则表达式?
Javascript中有两种方式应用正则表达式,一种是使用正则对象提供的方法进行匹配(如match、test、exec等),另一种是使用字符串提供的方法进行匹配(如search、replace、split等)。
1、使用正则对象提供的方法进行匹配
a. match():
截取正则表达式与当前字符串相同的部分,生成一个数组并返回。
例如:
regexp = /hello ([a-z]+)/i;
str = "hello world";
console.log(str.match(regexp)); // 输出 ["hello world", "world"]
b. test():
判断当前字符串是否符合正则表达式并返回Boolean类型。
例如:
regexp = /hello ([a-z]+)/i;
str = "hello world";
console.log(regexp.test(str)); // 输出 true
c. exec():
截取正则表达式与当前字符串相同的部分,生成一个数组并返回。
例如:
regexp = /hello ([a-z]+)/i;
str = "hello world";
console.log(regexp.exec(str)); // 输出 ["hello world", "world"]
2、使用字符串提供的方法进行匹配
a. search():
查找当前字符串中符合正则表达式的字符串,并返回其位置。
例如:
regexp = /hello/i;
str = "hello world";
console.log(str.search(regexp)); // 输出0
b. replace():
将当前字符串中符合正则表达式的字符串替换成指定字符串,生成一个新的字符串并返回。
例如:
regexp = /hello/i;
str = "hello world";
console.log(str.replace(regexp, "Hi")); // 输出 Hi world
c. split():
将当前字符串按符合正则表达式的字符串进行分割,生成一个数组并返回。
例如:
regexp = / /;
str = "hello world";
console.log(str.split(regexp)); // 输出 ["hello", "world"]
五、高效匹配技巧
1、^和\d:
在需要匹配一行的开头,并且是数字的情况下,可以使用 ^\d,可以少扫描很多字符串。
例如:
regexp = /^\d/;
str = "123456789";
console.log(str.split(regexp)); // 输出 ["123456789"]
2、$和\d:
在需要匹配一行的结尾,并且是数字的情况下,可以使用 \d$,可以少扫描很多字符串。
例如:
regexp = /\d$/;
str = "123456789";
console.log(str.split(regexp)); // 输出 ["123456789"]
3、空白符匹配:
在需要匹配空白符的情况下,可以使用 \s,可以匹配空格、制表符、换行符等。
例如:
regexp = /\s/;
str = "hello world";
console.log(str.split(regexp)); // 输出 ["hello", "world"]
4、除数字和字母以外的字符:
在需要匹配除数字和字母以外的字符的情况下,可以使用 \W,可以匹配空格、制表符、换行符等以外的字符。
例如:
regexp = /\W/;
str = "hello world!";
console.log(str.split(regexp)); // 输出 ["hello", "world"]
5、非贪婪模式:
在需要匹配指定字符之间的字符串(不包含指定字符)的情况下,可以使用非贪婪模式(?:.*?)。
例如:
regexp = /hello (.*?)/i;
str = "hello world, hello kitty";
console.log(str.match(regexp)); // 输出 ["hello world,", "world"]
本文介绍了Javascript正则表达式的基本语法、常见正则表达式元字符、某些特殊字符、以及在Javascript中如何应用正则表达式,并分享了一些实用的JS正则表达式的高效匹配技巧,相信读者已经掌握了JS正则表达式的基础知识,期待读者可以在日后的工作、学习中有更多的收获。