正则的一些例子
var str1="hhxx ttXS gox!2";
console.log(str1.match(/[xyz]/g));//["x", "x", "x"] 匹配x或y或z
console.log(str1.match(/[x-z]/g));//["x", "x", "x"] 匹配x到z间的字符
console.log(str1.match(/[^a-z]/g));//[" ", "X", "S", " ", "!", "2"] 匹配不在x到z间的字符
console.log(str1.match(/x|hhx/g));//["hhx", "x", "x"] 匹配x或hhx
console.log(str1.match(/x(?=!)/g));//["x"] 匹配以!跟随的x
console.log(str1.match(/x(?!!)/g));//["x", "x"] 匹配不以!跟随的x
console.log("a1-a3".match(/[1\-3]/g));//["1", "-", "3"] 转义字符的使用,匹配1或-或3
console.log("a1-a3".match(/[1-3]/g));//["1", "3"] 注意与上一行的区别
console.log(str1.match(/\s/g));//[" ", " "] 匹配空格,\S匹配不是空格
console.log(str1.match(/\w/g));//["h", "h", "x", "x", "t", "t", "X", "S", "g", "o", "x", "2"] 匹配[A-Za-z0-9_]
console.log(str1.match(/\W/g));//[" ", " ", "!"] 匹配不是[A-Za-z0-9_],即匹配特殊字符
console.log(str1.match(/\d/g));//["2"] 匹配不是[0-9_]
console.log(str1.match(/^hh/g));//["hh"] 匹配hh,而且hh必须是在搜索字符串的开头
console.log(str1.match(/2$/g));//["2"] 匹配2,而且2必须是在搜索字符串的结尾
console.log(str1.match(/.../g));//["hhx", "x t", "tXS", " go", "x!2"] 匹配任何字符,除了回车
console.log(str1.match(/hx*/g));//["h", "hxx"] *表示匹配x(0到n次)
console.log(str1.match(/hx?/g));//["h", "hx"] ?表示匹配x(0到1次)
console.log(str1.match(/hx+/g));//["hxx"] +表示匹配x(至少1次)
console.log(str1.match(/hx{1,3}/g));//["hxx"] {}表示匹配x(1次到3次)
console.log(str1.replace(/(hh)(xx)/g,'$2$1'));//xxhh ttXS gox!2 ()用在replace中进行替换
str1.match(/[xyz]/g)
的意思说在str1中找寻满足模式[xyz]的字符串,/g
表示寻找到满足的字符串后再接着寻找直到str1结束,每找到一个字符串就存放在数组里,最终返回这个数组,如果一个都没找到则返回null。
解释一下上面的str1.match(/hx?/g)
,看下其匹配的计算逻辑。首先要匹配的模式是hx?
,那么开始从str1的第一个字符查起,字符h
满足模式,这时并没有把h
存入数组,而是继续查第二个字符h
,这时hh
不满足模式,那么就将h
存入数组。接着查第二个字符h
,满足模式,只要满足就继续查直到不满足,所以查到了hx
,最终返回结果["h","hx"]