概念:正则表达式在代码中常简写为regex、regexp或RE,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。(搜素模式可以用于文本搜索和文本替换)
语法:
/正则表达式主体/修饰符(可选)
创建方式
- 直接量语法创建:直接量定义为包含在一对斜杠(
/
)之间的字符 - 构造函数创建:通过
RegExp()
构建函数可以实现动态创建正则表达式。
正则表达式相关知识
关于正则表达式的一些知识我们可以从以下几个方面来了解:
直接量字符:所有字母和数字都是按照字面含义进行匹配的,其他非字母的字符需要通过 \
作为前缀进行转移。注意,它们都是精确匹配,每一个字符都只能匹配一个字符。
字符类:不想匹配某一个特定的字符而是想匹配某一类字符的情况下。
重复:当一个模式需要被多次匹配的时候。
选择:用|
字符分隔可供选择的模式,匹配时会尝试从左至右匹配每一个分组,直到发现匹配项。
引用:带圆括号的表达式的另一个用途是允许在同一个正则表达式的后面引用前面的子表达式。
分组:带 ()
的可以把单独的项组合成子表达式以便可以像一个独立的单元用 |
、*
、+
或者 ?
对单元内的项进行处理。
锚元素:不用来匹配实际的字符,而是匹配指定的位置。(任何正则表达式都可以作为锚点条件)
修饰符
-
i
执行不区分大小写匹配 -
g
全局匹配 -
m
多行匹配模式 -
y
sticky 修饰符 -
s
表示点.
,可以表示任意字符,不设置的话,四个字节的 UTF-16 字符和行终止符不能用.
表示 -
u
开启 Unicode 模式,用于正确处理大于\uFFFF
的 Unicode 字符
字符串正则方法
String.prototype.search(regexp|substr)
返回第一个和参数匹配的子串的起始位置,没有匹配子串返回 -1;如果参数不是正则表达式,将会通过 RegExp 构造函数转换成正则表达式。
String.prototype.replace(regexp|substr, newSubStr|function)
第一个参数同 search
,查找指定子串,如果第二个表达式是字符串,将把第一个参数匹配的子串替换成为 newSubStr
;如果在替换字符串中出现了 $
加数字, replace
将用与指定的子表达式相匹配的文本来替换这些字符。
使用字符串作为参数时替换字符串可以插入下面的特殊变量名:
-
$$
插入一个"$"
-
$&
插入匹配的子串 -
$
插入当前匹配的子串左边的内容 -
$'
插入当前匹配的子串右边的内容 -
$n
假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串,注意:索引是从1开始。
String.prototype.match(regexp)
参数 regexp
为一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj)
将其转换为一个 RegExp
。
String.prototype.split([separator[, limit]])
separator
指定表示每个拆分应发生的点的字符串,可以是一个字符串或正则表达式,如果空字符串(""
)被用作分隔符,则字符串会在每个字符之间分割。
limit
一个整数,限定返回的分割片段数量。
RegExp 属性
-
flags
会返回正则表达式的修饰符; - 表示对应修饰符是否存在的只读布尔值,
global
(表示是否带有修饰符g
),ignoreCase
(i
),multiline
(m
),sticky
(y
),dotAll
(s
),unicode
(u
); -
source
只读字符串,包含正则表达式的文本; -
lastIndex
可读/写整数。如果带有g
修饰符,这个属性存储在整个字符串中下一次检索的开始位置。这个属性会被exec()
和test()
方法用到。
方法
-
exec()
,如果没有找到任何属性,将返回null
,如果找到匹配返回一个数组,该数组第一个元素是相匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串。当调用
exec()
的正则表达式具有修饰符g
时,它将把当前正则表达式对象的lastIndex
属性设置为紧挨着匹配子串的字符位置。 -
test()
,调用test()
和exec()
等价,当exec()
返回结果不是null
,test()
返回true
,否则返回false
。
网友评论