// `.`的使用 var reg = /./g; var text = "abcdefg"; var res = text.match(reg); console.log(res); // (7) ["a", "b", "c", "d", "e", "f", "g"]
// `a`的使用 var reg = /A/gi; // 全局匹配。忽略大小写 var text = "abcdefg"; var res = text.match(reg); console.log(res); // (7) ["a"]
// `ab`的使用 var reg = /AbCdef/gi; // 全局匹配。忽略大小写 var text = "abcdefg"; var res = text.match(reg); console.log(res); // (7) ["abcdef"]
// `a|b`的使用 一 var reg = /a|b|c|d/; // 非全局匹配。 var text = "abcdefg"; var res = text.match(reg); console.log(res); // ["a", index: 0, input: "abcdefg"]
// `a|b`的使用 二 var reg = /a|b|c|d/g; // 全局匹配。 var text = "abcdefg"; var res = text.match(reg); console.log(res); // (4) ["a", "b", "c", "d"]。使用全局匹配。会在匹配对后继续匹配
// `a*`的使用 var reg = /a*/; var text = "abcdcba"; var res = text.match(reg); console.log(res); // ["a", index: 0, input: "abcdcba"]
// `a*`的使用 var reg = /a*/g; // 全局匹配。 var text = "abcdcba"; var res = text.match(reg); console.log(res); // (8) ["a", "", "", "", "", "", "a", ""]。使用全局匹配会把之后没有匹配到的转化为空字符串
// `\`的使用 回到第一个 . 的使用那里。如果我把 . 前面加一个 \ 符号,那么这个点就是一个普通的点了 var reg = /\./g; // 全局匹配。 var text = "abcdefg"; var res = text.match(reg); console.log(res); // null
// `[a-z]`的使用 var reg = /[a-z]/g; // 全局匹配。匹配 a-z 的任意一个,因为是全局匹配。所以会一直找。但是不会有 1234 var text = "abcd1234"; var res = text.match(reg); console.log(res); // (4) ["a", "b", "c", "d"]
// `[a-z]`的使用 var reg = /[^a-z]/g; // 全局匹配。匹配 除了 a-z 的任意一个。所以是 1 2 3 4。因为是全局匹配。所以会一直找 var text = "abcd1234"; var res = text.match(reg); console.log(res); // (4) ["1", "2", "3", "4"]
// `[\b]`的使用 var reg = /[\b]/g; // 全局匹配。匹配 \b,当然也可以匹配其他的特殊转义字符,见 正则表达式特殊字符 var text = "abcd\b1234"; var res = text.match(reg); console.log(res); // (4) ["1", "2", "3", "4"]
// `\d`,`\D`,`\s`,`\S`,`\w`,`\W`的使用 var reg = /\D\d/g; // 全局匹配。匹配一个非数字与一个数字。两者紧靠在一起 注意顺序 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["d1"] // 如果是下面的一个,则匹配 null var reg = /\D\d/g; // 全局匹配。匹配一个数字与一个非数字。两者紧靠在一起 注意顺序 var text = "abcd1234"; var res = text.match(reg); console.log(res); // null // 匹配一个 var reg = /\D\s\w\d/g; // 全局匹配。注意顺序 注意大小写 var text1 = "abcd1234"; var text2 = "abcd _1234"; var res1 = text1.match(reg); var res2 = text2.match(reg); console.log(res1); // null console.log(res2); // ["d _1"]
// `*`的使用 // 非全局匹配。 var reg = /[a-z]*/; // 匹配 a-z 的0个或者多个 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["abcd", index: 0, input: "abcd1234"] // 全局匹配。 var reg = /[a-z]*/g; // 匹配 a-z 的0个或者多个 var text = "abcd1234"; var res = text.match(reg); console.log(res); // (6) ["abcd", "", "", "", "", ""]。当匹配为 0 个的时候,会变成空字符串。对比 + 号
// `+`的使用 // 非全局匹配。 var reg = /[a-z]+/; // 匹配 a-z 的0个或者多个 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["abcd", index: 0, input: "abcd1234"] // 全局匹配。 var reg = /[a-z]+/g; // 匹配 a-z 的0个或者多 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["abcd"]。因为至少匹配一个,所以不会有空字符串。对比 * 号
// `?`的使用 // 非全局匹配。 var reg = /[a-z]?/; // 匹配 a-z 的0个或者一个 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["a", index: 0, input: "abcd1234"]。匹配到一个就停下来 // 全局匹配。 var reg = /[a-z]?/g; // 匹配 a-z 的0个或者一个 var text = "abcd1234"; var res = text.match(reg); console.log(res); // ["a", "b", "c", "d", "", "", "", "", ""]。abcd匹配到了。1234则是空字符串。
var reg = /ab(cd(1234))/; var text = "abcd1234"; var res = text.match(reg); console.log(res); // (3) ["abcd1234", "cd1234", "1234", index: 0, input: "abcd1234"]
var reg = /ab(?:cd(1234))/; var text = "abcd1234"; var res = text.match(reg); console.log(res); // (3) ["abcd1234", "1234", index: 0, input: "abcd1234"]
var reg = /ab(cd(1234))/; var text = "abcd1234"; var res = text.match(reg); console.log(res); // (3) ["abcd1234", "cd1234", "1234", index: 0, input: "abcd1234"] console.log(RegExp.$0); // undefined console.log(RegExp.$1); // cd1234 console.log(RegExp.$2); // 1234 var res1 = text.replace(reg,"$1$2"); // 使用 $1 $2 取出捕获组的内容 console.log(res1); // cd12341234
正则表达式断言
^:字符串的开始必须是
$:字符串的结尾必须是
\b:匹配文字(单词)边界
\B:非文字(单词)边界
(?=...):积极的前瞻(也叫前瞻或者是顺序肯定环视)
(?!...):消极的前瞻(也加后瞻或者是顺序否定环视)
^,$的使用
1 2 3 4 5 6 7 8 9 10
var reg = /^b.*\d$/; // 要求字符 b 开头,中间 * 个任意字符(除换行符),必须以数字结束 var text1 = "abcd1234"; var text2 = "bcd"; var text3 = "bcd1234"; var res1 = text1.match(reg); var res2 = text2.match(reg); var res3 = text3.match(reg); console.log(res1); // null console.log(res2); // null console.log(res3); // ["bcd1234", index: 0, input: "bcd1234"]
\b,\B的使用
1 2 3 4 5 6 7 8 9 10
var reg = /\bhi\b/; // var text1 = "hi"; var text2 = "him"; var text3 = "history"; var res1 = text1.match(reg); var res2 = text2.match(reg); var res3 = text3.match(reg); console.log(res1); // ["hi", index: 0, input: "hi"] console.log(res2); // null console.log(res3); // null
积极的前瞻 (?=…) 积极的前瞻 匹配后面是 … 的位置,不捕获匹配结果
1 2 3 4 5 6 7
var reg = /abcd(?=1234)/; var text = "abcd1234"; var text1 = "abcdefg"; var res = text.match(reg); var res1 = text1.match(reg); console.log(res) // ["abcd", index: 0, input: "abcd1234"] console.log(res1) // null
varreg = /abcd(?!=1234)/; var text = "abcd1234"; var text1 = "abcdefg"; var res = text.match(reg); var res1 = text1.match(reg); console.log(res) // null console.log(res1) // ["abcd", index: 0, input: "abcd1234"]
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var res = text.match(reg); console.log(res); // (2) ["淡如水,", ",", index: 4, input: "君子之交淡如水,小人之交甘若醴"]
$$:插入$
1 2 3 4
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var newStr = text.replace(reg,"$$"); console.log(newStr); // 君子之交$小人之交甘若醴
$&:插入整个匹配
1 2 3 4
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var newStr = text.replace(reg,"$&"); console.log(newStr); // 君子之交淡如水,小人之交甘若醴
$`:插入匹配项前面的字符串
1 2 3 4
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var newStr = text.replace(reg,"$`"); console.log(newStr); // 君子之交君子之交小人之交甘若醴
$':插入匹配项后面的字符串
1 2 3 4
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var newStr = text.replace(reg,"$'"); console.log(newStr); // 君子之交小人之交甘若醴小人之交甘若醴
$Y:插入第Y个捕获的组
1 2 3 4
var reg = /.{2}水(.)/; var text = "君子之交淡如水,小人之交甘若醴"; var newStr = text.replace(reg,"$1"); console.log(newStr); // 君子之交,小人之交甘若醴
var reg1 = /.at/; var res = reg1.exec(text); console.log(res.index); // 0 console.log(res[0]); // bat
var res = reg1.exec(text); console.log(res.index); // 0 console.log(res[0]); // bat
var reg2 = /.at/g;
var res = reg2.exec(text); console.log(res.index); // 0 console.log(res[0]); // bat
var res = reg2.exec(text); console.log(res.index); // 5 console.log(res[0]); // cat
test()方法
接收一个字符串作为参数,返回: true:匹配 false:不匹配
1 2 3 4 5 6 7
var text = "abcd1234"; var reg1 = /\D/g; var reg2 = /\s/g; var res1 = reg1.test(text); console.log(res1); // true var res2 = reg2.test(text); console.log(res2); // false
关于使用RegExp构造函数
语法:var reg = new RegExp(参数1[,参数2]);
1 2 3 4
var reg = newRegExp("\D","gi"); var text = "ABd1234"; var res = reg.exec(text); console.log(res); // ["d", index: 2, input: "ABd1234"]