本文主要内容有三点:
1. 正则表达式主体和修饰符 说明;
2. String对象 使用正则表达式搜索字符串;
3. 正则表达式对象(RegExp)使用正则表达式搜索字符串
- 字面量方式创建:/
正则表达式主体
/修饰符(可选)
- RegExp实例方式创建:new RegExp(
'正则表达式主体'
,'修饰符'(可选)
)
修饰符:
意义 | |
---|---|
i | 忽略大小写(对大小写不敏感) |
g | 全局匹配(查找所有匹配项,而不是查找到第一个匹配项后停止) |
m | 多行匹配(将字符串识别为多行而不是一行,^为一行的开头,$为一行的结尾,换行符为\n) |
表达式:
意义 | |
---|---|
^ | 字符串开头 |
$ | 字符串结尾 |
. | 匹配除了换行符(\n)和行结束符(windows CR+LF, Mac CR, Unix LF,) |
? | 0或1个 ?前面的字符 |
+ | 一或多个 +前面的字符 |
* | 0或多个 *前面的字符 |
n{X} | 匹配X个连续模式n
|
n{X,Y} | 匹配X到Y个连续模式n
|
n{X,} | 匹配X或以上个连续模式n
|
x(?=n) | 匹配x后紧接着字符串n的字符串x |
x(?!n) | 匹配x后没有 紧接着字符串n的字符串x |
括号
意义 | |
---|---|
[abc] | 查找括号内的任意字符 |
[^abc] | 查找不在括号内的任意字符 |
(red|blue|green) | 查找任何指定的选项 |
[0-9] | 查找任何0到9的数字 |
[A-Z] | 查找任何A到Z的字符 |
[a-z] | 查找任何a到z的字符 |
[A-z] | 查找任何A到z的字符 |
元字符
意义 | |
---|---|
\w | 单词字符,即[0-9]|[A-z]| _ |
\W | 非单词字符 |
\d | 数字 |
\D | 非数字 |
\s | 空白字符 |
\S | 非空白字符 |
\b | 单词边界 |
\B | 非单词边界 |
\0 | NULL字符 |
\n | 换行符 |
\f | 换页符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符 |
\ddd | 以八进制数ddd规定的字符 |
\xdd | 以十六进制数dd规定的字符 |
\udddd | 以十六进制数dddd规定的unicode字符 |
在js中匹配字符串
String对象 使用正则表达式搜索字符串;
String对象的方法 | 意义 |
---|---|
someStr.search (string or regexp) |
返回第一个匹配字符串的下标,无则-1 |
someStr.match (string or regexp) |
返回匹配到的字符串数组(匹配模式不是g只返回第一项),无则返回null 注意:在 全局检索模式 下,match() 既不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置 ,只有最外层匹配文本的数组。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。 |
someStr.replace (string or regexp, 'newStr'or functionReturnNewStr) |
将匹配字符串替换为newStr,只替换最外层匹配 不针对子表达式匹配替换 |
someStr.split (string or regexp, length) |
返回由匹配字符串分隔字符串后,形成的数组(不超过length长度) |
正则表达式对象(RegExp)使用正则表达式搜索字符串
RegExp对象的方法 | 意义 |
---|---|
regObj.test (originStr) |
originStr中是否存在匹配值,返回true或false |
regObj.exec (originStr) |
originStr中是否存在匹配值,返回该匹配值数组(包含子表达式匹配信息 )或null。g模式 每次执行从匹配末位开始重新匹配,遍历 到返回null则可以得到所有匹配值 ,非g则每次返回的都是第一个匹配值的数组 |
regObj.toString() | 返回正则表达式的字面量字符串 |
tips:贪婪模式和非贪婪模式小例子
// 获取两个ab之间的字符串
var str = 'ababcdeaababaeab';
var greedyMode = /ab(?!ab)(.*)ab/g;
var noneGreedyMode = /ab(?!ab)(.*?)ab/g;
//console.log(greedyMode.exec(str));
var gm = '1';
var nongm = '1';
while(gm){
console.log('greedyMode');
gm=greedyMode.exec(str);
console.log(gm);
}
while(nongm){
console.log('noneGreedyMode');
nongm = noneGreedyMode.exec(str);
console.log(nongm);
}