文章目录
正则表达式是什么
正则表达式是用于匹配字符串中字符组合的模式。
在 JavaScript中,正则表达式也是对象。
这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法
构建方法
1、标记形式
使用一个正则表达式字面量,其由包含在斜杠之间的模式组成;
其中,‘//’是标记,abc表示要匹配的字符
var re = /ab+c/;
脚本加载后,正则表达式字面量就会被编译。当正则表达式保持不变时,使用此方法可获得更好的性能。
2、用正则对象的构造函数RegExp
调用RegExp对象的构造函数
var re = new RegExp("ab+c");
在脚本运行过程中,用构造函数创建的正则表达式会被编译。如果正则表达式将会改变,或者它将会从用户输入等来源中动态地产生,就需要使用构造函数来创建正则表达式。
使用正则表达式的方法
方法 | 作用描述 |
---|---|
test | 一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。 |
search | 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。 |
match | 一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。 |
replace | 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split | 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。 |
简单匹配:使用 test 或 search 方法;
想得到更多信息:使用 exec 或 match 方法(但是比较慢);
如果使用exec 或 match 方法匹配成功,将返回一个数组并且更新相关的正则表达式对象的属性和预定义的正则表达式对象;如果匹配失败,那么 exec 方法返回 null(也就是false)。
将用户输入转义为正则表达式中的一个字面字符串, 可以通过简单的替换来实现:
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
//$&表示整个被匹配的字符串
}
编写正则表达式的模式
使用简单模式
简单模式是由你想直接找到的字符构成(必须连续相同)
let reg = /abc/
reg.test("abcbcc") //true
reg.test("ab cbc") //false
reg.test("adbcc") //false
使用特殊字符
当你需要匹配一个不确定的字符串时,比如寻找一个或多个 “b”,或者寻找空格,可以在模式中使用特殊字符。
断言(Assertions):表示一个匹配在某些条件下发生。断言包含先行断言、后行断言和条件表达式。
字符类(Character Classes):区分不同类型的字符,例如区分字母和数字。
组和范围(Groups and Ranges):表示表达式字符的分组和范围。
量词(Quantifiers):表示匹配的字符或表达式的数量。
Unicode 属性转义(Unicode Property Escapes):基于 unicode 字符属性区分字符。例如大写和小写字母、数学符号和标点。
\ 转义字符
let reg = /\./ //匹配.字符
let reg = /\// //匹配/字符
[ ]匹配字符集合
匹配集合中的字符,只要匹配到其中一个即可
let reg = /[123abc]/
reg.test("a") //true
[^]匹配集合中没有的
有集合中没有的字符即可
let reg = /^123456/
reg.test("123") //false
reg.test("a") //true
. 匹配除了换行符(\r\n)以外的任意字符
let reg = /./
reg.test("a") // true
reg.test("\r") // false
因此带.的不能简单用.匹配,
用\.或[.]匹配
\d 匹配数字
let reg = /\d/
reg.test("1b") //true
let reg = /\d\d/
reg.test("1b12") //true
reg.test("1ab1") //false
\D 匹配不是数字的
let reg = /\D/
reg.test("123b") //true
\w 匹配数字/字母/下划线
let reg = /\w/
reg.test("12") //true
reg.test("_") //true
reg.test(".") //false
\W -> \w相反
\s 匹配空白字符(换行空格等)
let reg = /\s/
reg.test("1 2") //true
reg.test("\t") //true
reg.test("12abc") //false
\S -> \s相反
^ 匹配开头元素
如/^abc/匹配以abc开头的
$ 匹配结尾元素
量词
* 0次或多次;
+ 1或多次;
? 0或1次;
{3} 3次;
{3,} 至少3次;
{3,5} 3~5次;
| 表示或;()表示分组
通过标志进行高级搜索
正则表达式有六个可选参数 (flags) 允许全局和不分大小写搜索等。这些参数既可以单独使用也能以任意顺序一起使用, 并且被包含在正则表达式实例中。
g -> 全局搜索。
i -> 不区分大小写搜索。
m -> 多行搜索。
s -> 允许 . 匹配换行符。
u -> 使用unicode码的模式进行匹配。
y -> 执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。
语法
var re = /pattern/flags;
或者
var re = new RegExp("pattern", "flags");
接下来标志不能添加或删除
文档例子:
例如,re = /\w+\s/g 将创建一个查找一个或多个字符后有一个空格的正则表达式,或者组合起来像此要求的字符串。
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
// ["fee ", "fi ", "fo "]
两种写法:
var re = /\w+\s/g;
var re = new RegExp("\\w+\\s", "g");
m标志用于指定多行输入字符串应该被视为多个行。如果使用m标志,^和$匹配的开始或结束输入字符串中的每一行,而不是整个字符串的开始或结束。
总结
这里对文章进行总结:
以上就是本文的内容,本文简单介绍了JS正则表达式的相关内容及一些常用用法,了解更多参考下面文档内容。