使用编辑器修改内容,在编辑器一般都有全局搜索功能,如使用正则表达式匹配会快速得多,比如下面例子
例子一: 将http下的jpg地址找出来 并去掉http
|
|
答案
- http:(.+.jpg) 替换为 $1
- 解释
- () 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
- . 匹配除换行符 \n 之外的任何单字符
- 匹配前面的子表达式一次或多次
- 匹配前面的子表达式零次或多次
- \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。
- $1 匹配第一个子表达式
例子二:将时间改为 “XXXX年XX月XX日”
|
|
例子三:获取一个字符串中的数字字符,并按数组形式输出,如:dgfhfgh254bhku289fgdhdy675gfh,输出[254,289,675]
答案
123var str = 'dgfhfgh254bhku289fgdhdy675gfh';re = \/b+\g;str.match(re); // (3) ["254", "289", "675"]解释
1234567891011var str = 'dgfhfgh254bhku289fgdhdy675gfh';var re = \/b\;str.match(re); // ["2", index: 7, input: "dgfhfgh254bhku289fgdhdy675"]再继续解决以上问题:全局遍历re = \/b\g;str.match(re); // (9) ["2", "5", "4", "2", "8", "9", "6", "7", "5"]再继续解决以上问题吧:连续出现至少一次以上re = \/b+\g;str.match(re); // (3) ["254", "289", "675"]
例子四:采用replace方法匹配
|
|
- 解释
- g 是全局搜索
- i 忽略大小写,默认不忽略大小写。以上例子没体现
- 字符中之所以用两个反斜杠是为了保留之后的斜杠
|
|
- 知识点 :在括号里 ^ 表示反字符串,也即是非
|
|
- 知识点 :范围类,比如[0-9] [a-z]
|
|
注:如果想要在[]里面匹配 - ,可以[0-9-]
|
|
例子五:预定义类
|
|
- 知识点 :m 表示匹配换行符
|
|
例子六:匹配范围尽可能多的匹配-贪婪匹配
|
|
例子七:匹配范围尽可能少的匹配-非贪婪匹配
|
|
例子八:分组匹配
|
|
例子九:反向引用,采用 $ 符号
|
|
例子十:前瞻,断言
|
|
解释:(?=\d)这是断言部分,参与匹配,但不替换
例子十一:RegExp.prototype.test(str)
|
|
解释:出现以上结果不一致的原因是因为匹配后再执行一次,会从上一次执行的下一个位置开始。
|
|
- 知识点
方法 | 描述 |
---|---|
exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。 |
test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。 |
match | 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。 |
search | 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
replace | 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split | 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。 |