一. 语法
var patt = new RegExp(pattern,modifiers);
或者更简单的方式:
var patt = /pattern/modifiers;
- pattern(模式) 描述了表达式的模式
- modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。
比如,以下是等价的:
- var re = new RegExp("\w+");
- var re = /\w+/;
二. 正则的一系列方法
RegExp 对象方法
方法 | 描述 | 语法 |
---|---|---|
exec | 检索字符串中指定的值。有则返回找到的值,否则返回 null | RegExpObject.exec(string) |
test | 检索字符串中指定的值。有则返回true,否则返回false | RegExpObject.test(string) |
toString | 返回正则表达式的字符串值(把正则表达式转为字符串形式) | RegExpObject.toString() |
支持正则表达式的 String 对象的方法
方法 | 描述 | 语法 |
---|---|---|
search | 用正则检索字符串。有则返回该值在字符串中起始位置,否则返回 -1 | string.search(searchvalue) |
match | 用正则检索字符串。有则返回满足条件的第一项(配合/g可以检索整个字符串),否则返回null | string.match(regexp) |
replace | 替换与正则表达式匹配的子串 | string.replace(searchvalue,newvalue) |
split | 用指定的规则把一个字符串分割成字符串数组 | string.split(separator(字符串或者正则),limit(返回的最大长度) |
支持正则表达式的 String 对象的方法
方法 | 描述 | 语法 |
---|---|---|
constructor | 返回正则表达式原型的函数 | RegExpObject.constructor |
global | 判断正则表达式是否被设置了“g”修饰符,是返回true,否则返回false | RegExpObject.global |
ignoreCase | 判断正则表达式是否被设置了“i”修饰符,是返回true,否则返回false | RegExpObject.ignoreCase |
split | 用指定的规则把一个字符串分割成字符串数组 | string.split(separator(字符串或者正则),limit(返回的最大长度) |
lastIndex | 用于规定下次匹配的起始位置(只有在设置了/g修饰符下才可使用) | RegExpObject.lastIndex |
lastIndex 属性用于规定下次匹配的起始位置。
注意: 该属性只有设置标志 g 才能使用。
- 当上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的。
- 则下次他们都以 lastIndex属性所指的位置作为下次检索的起始点。
- 这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。
举例:
var str=“The rain in Spain stays mainly in the plain”;
var patt1=/ain/g;
while (patt1.test(str)==true)
{
document.write("‘ain’ found. Index now at: “+patt1.lastIndex);
document.write(”<br>");
}
输出结果:
‘ain’ found. Index now at: 8
‘ain’ found. Index now at: 17
‘ain’ found. Index now at: 28
‘ain’ found. Index now at: 43
注意:该属性是可读可写的。
- 只要目标字符串的下一次搜索开始,就可以对它进行设置。
- 当方法 exec() 或 test()再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。
三. 正则的一些匹配,字符规则
修饰符------>修饰符用于执行区分大小写和全局匹配
方法 | 描述 | 语法 |
---|---|---|
i | 忽略大小写匹配 | /regexp/i |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) | /regexp/i |
m | 执行多行匹配 | /regexp/m |
方括号------>方括号用于查找某个范围内的字符
方法 | 功能 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找任何从 0 至 9 的数字 |
[a-z] | 查找任何从小写 a 到小写 z 的字符 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符 |
[A-z] | 查找任何从大写 A 到小写 z 的字符 |
[adgk] | 查找给定集合内的任何字符 |
[^adgk] | 查找给定集合外的任何字符 |
(red|blue|green) | 查找任何指定的选项 |
元字符------>元字符(Metacharacter)是拥有特殊含义的字符
方法 | 功能 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找数字、字母及下划线 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 查找NULL字符 |
\n | 查找换行符 |
\f | 查找换页符 |
\r | 查找回车符 |
\t | 查找制表符 |
\v | 查找垂直制表符 |
\xxx | 查找以八进制数 xxx 规定的字符 |
\xdd | 查找以十六进制数 dd 规定的字符 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符 |
量词
量词 | 描述 | 举例 |
---|---|---|
n+ | 匹配任何包含至少一个 n 的字符串 | /a+/ 匹配 “candy” 中的 “a”,“caaaaaaandy” 中所有的 “a” |
n | 匹配任何包含零个或多个 n 的字符串。 | /bo*/ 匹配 “A ghost booooed” 中的 “boooo”,“A bird warbled” 中的 “b”,但是不匹配 “A goat grunted” |
n? | 匹配任何包含零个或一个 n 的字符串。 | /e?le?/ 匹配 “angel” 中的 “el”,“angle” 中的 “le”。 |
n{X} | 匹配包含 X 个 n 的序列的字符串。 | /a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。 |
n{X,} | X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。 | /a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a” |
n{X,Y} | X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。 | /a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,“caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。 |
n$ | 匹配任何结尾为 n 的字符串 | |
^n | 匹配任何开头为 n 的字符串 | |
?=n | 匹配任何其后紧接指定字符串 n 的字符串 | |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串 |