为什么使用正则表达式
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。主要有以下几种使用场景:
- 测试字符串内的模式
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 - 替换文本
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。 - 基于模式匹配从字符串中提取子字符串
可以查找文档内或输入域内特定的文本。
正则表达式元字符和特性
语法
var patt=/pattern/modifiers;
pattern
(模式) 描述了表达式的模式
modifiers
(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
修饰符
i
:执行对大小写不敏感的匹配
g
:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m
:执行多行匹配
字符匹配
普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a"
将匹配到文本中的 "a"
字符。
元字符:元字符具有特殊的含义,例如 \d
匹配任意数字字符,\w
匹配任意字母数字字符,.
匹配任意字符(除了换行符)等。
量词
*
:匹配前面的模式零次或多次。
+
:匹配前面的模式一次或多次。
?
:匹配前面的模式零次或一次。
{n}
:匹配前面的模式恰好 n
次。
{n,}
:匹配前面的模式至少 n
次。
{n,m}
:匹配前面的模式至少 n
次且不超过 m
次。
字符类
[ ]
:匹配括号内的任意一个字符。例如,[abc]
匹配字符 "a"
、"b"
或 "c"
。
[^ ]
:匹配除了括号内的字符以外的任意一个字符。例如,[^abc]
匹配除了字符 "a"
、"b"
或 "c"
以外的任意字符。
\w
:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\d
:匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
[\s\S]
:匹配所有。\s
是匹配所有空白符,包括换行,\S
非空白符,不包括换行。
\n
:匹配一个换行符
\r
:匹配一个回车符
边界匹配
^
:匹配字符串的开头。
$
:匹配字符串的结尾。
\b
:匹配单词边界。
\B
:匹配非单词边界。
分组和捕获
( )
:用于分组和捕获子表达式。
(?: )
:用于分组但不捕获子表达式。
特殊字符
\
:转义字符,用于匹配特殊字符本身。
.
:匹配除换行符(\n
、\r
)之外的任何单个字符,相等于 [^\n\r]
。。
|
:用于指定多个模式的选择。
RegExp 对象方法
exec
检索字符串中指定的值。返回找到的值,并确定其位置。未匹配到返回null
const str = '123456abc123'
const reg = /abc/
reg.exec(str) // => 未匹配到返回null,有匹配结果则返回的是一个数组,包含匹配值、索引、原始字符串等信息
test
检索字符串中指定的值。返回 true
或 false
。
const str = '123456abc123'
const reg = /abc/
reg.test(str) // => true
支持正则表达式的 String 对象的方法
search
search()
方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
如果没有找到任何匹配的子串,则返回 -1
,匹配到则返回位置索引。
// 语法:string.search(searchvalue)
// searchvalue可以是正则表达式,也可以是字符串
const str = '123456abc123'
const reg = /abc/
str.search(reg) // => 6
match
match()
找到一个或多个正则表达式的匹配。如果没有匹配结果,则返回null。
// 语法:string.match(searchvalue)
// searchvalue可以是正则表达式,也可以是字符串。当regexp是一个字符串时,会被隐式地转换成正则表达式对象
const str = '123456abc123'
const reg = /123/g
str.match(reg) // => ['123', '123']
str.match(/qqq/g) // => null,没有匹配到返回null
replace
replace
替换与正则表达式匹配的子串
const str = '123456abc123'
str.replace(/2/g, '') // => 13456abc13