正则:
/a|b|c|d/ 匹配a或者b, c, d
用通配符.匹配任何内容
匹配a, b 或 c
匹配集合 [0-9] [a-z0-9]
匹配差集 [^0-9] // 注意, 这个^ 在字符集里面是否定的意思, 而在字符集外面, 是开始的意思
匹配1个或者多个a : /a+/
匹配零个或者多个ao : /ao*/ 会匹配出 a
惰性匹配: 匹配长度为最小字符串 /<.*?>/ (注意了, js中的正则本身是贪婪匹配)
前置断言 (<=[xxx]?)
以xxx开始的字符串: /^xxx/
以xxx结尾的字符串: /xxx$/
元字符:
\w // 所有的数字和字母
\W // w的差集
\d // 所有数字
\D // 所有非数字
\s // 此匹配模式不仅匹配空格,还匹配回车符、制表符、换页符和换行符,你可以将其视为与[\r\t\f\n\v]类似。所有非数字字母
\S // 匹配所有非空白字符
/a{3,5}h/ // 指定匹配模式的上界下界
/a{3,}h/ // 指定匹配模式的下界
/a{3}h/ // 指定数量匹配
/colou?r/ // 模糊查询可选项: u就是可选项, 可以有, 也可以没有, 但是不可以是其他字符前置断言 (?=…) 以…开头
正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。后置断言 (?!…) 不以…开头
负向先行断言会查看并确保搜索匹配模式中的元素不存在。使用捕获组重用模式
1
2
3let repeatStr = "regex regex";
let repeatRegex = /(\w+)\s\1/;
repeatStr.match(repeatRegex); // Returns ["regex regex", "regex"]使用捕获组搜索和替换
1
"Code Camp".replace(/(\w+)\s(\w+)/, '$1'); // 此时, 使用括号括起来的元素就是一个组, 这个组会命名为$1 - $n在替换的时候可以使用到
用正则表达式写一个trim
1
2
3let hello = " Hello, World! ";
let wsRegex = /(\s+)(\w+.+\w+\S)(\s+)/;
let result = hello.replace(wsRegex, '$2');注意 reg.test()中的reg正则对象存在一个值, 这个值表示我使用test()方法匹配的起点index, 如果稍不注意,就很容易翻车
1
2
3
4
5
6
7
8
9
10
11(function(){
const reg = /o/g;
function isHasO(str){
// reg.lastIndex = 0; 这样就可以避免这种情况
return reg.test(str)
}
var str = 'google';
console.log(isHasO(str))
console.log(isHasO(str))
console.log(isHasO(str))
}())