正则表达式
- 1.认识正则
- 应用场景:表单验证,高级搜索
- 本质:用来记录文本规则的代码
- 2.声明
- 构造函数定义:
var reg = new ExpReg(/表达式/);
- 直接量定义(建议使用)
var reg = /表达式/;
- 构造函数定义:
3.预定义类
- . 除了回车和换行之外的任意字符 [^\n\r]
- \d 数字 digital [0-9]
- \D 非数字 [^0-9]
- \w 单词字符(所有的字母和数字)word[a-zA-Z0-9]
- \W 非单词 [^a-zA-Z0-9]
- \s 空格字符space不可见字符 [\f\r\n\t\v]
- \S 可见字符 [^\f\r\n\t\v]
- 4.边界和量词
-边界:
^ 回匹配行或者字符串的起始位置
^ 只有在[]内才表示非 在外边表示开始
回匹配行或者字符串的结尾位置… 在一起使用 表示必须是这个(严格模式) - 量词:
-
- 重复0次或多次 x>=0;
-
- 重复一次或更多次 x>=1
- ? 紧跟前面的出现0次或者1次
- {n} n次 x=n
- {n,} 至少n个 X>=n
- {n,m} n到m个 n<=x<=m
- () 优先级提升或者分组元字符;在一个正则表达式中,可以有很多分组(圆括号),那么如何界定分组的序号,所有的分组都是按照1,2,3, … 来排序的
- 1>从正则表达式左边开始往右边数‘(’
- 2> 从1开始编号,知道正则表达式结束
3> 在匹配的工程中,一个结果的所有组将出现在结果的m[i]中
// 1 2 var r = new RegExp("a(b(c))d"); // var r = new RegExp("abcd"); var s = "aaabcdefghijklmn" var m = r.exec(s);
[] 范围,表示一个字符
// [a-zA-Z] // [a-z] // [A-Z] // [0-9] // [aklp]
| 或者.或者的优先级最低
- 常用方法
你定义的正则表达式.test("要检测的字符串") //检测传入的字符串是否符合该正则表达式规则并返回布尔值
— 正则循环提取
<script> // 0123456789012345678901234567890 var s = "abcdbookefgbookabookbcdegabcdefg"; // 正则对象.exec(字符串) // 在"字符串" 中 找是否存在符合正则表达式的字符串, 如果有 // 找出来封装成结果对象, 并返回给 左边的变量 // 如果没有找到, 则返回一个 null var r = new RegExp("book", "g"); var m; // console.log(r.exec(s) === null); // 如果需要使用正则表达式循环的找出所有的内容, 需要使用 参数 "g" 表示全局 // new RegExp("正则表达式", "g"); // 使用全局模式后, 方法 exec 有了变化 // 第一次调用的时候 找出第一个 // 第二次调用的时候 找出第二个 // ... // 如果全部找出, 还调用则返回 null while((m = r.exec(s)) != null) { // 不为空就继续找, 为空就停下 console.log(m[0] + ", " + m.index + ", " + m[0].length); } </script>
— 正则替换
<script> // 字符串.replace() /* var s = "1234567"; var s2 = s.replace("3", "三"); console.log(s); console.log(s2); */ // 第一个参数除了是正常的字符串以外, 还可以是正则表达式对象 var s = "1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"; // => 1a2 var s2 = s.replace(new RegExp("a+", "g"), "a"); console.log(s); console.log(s2); </script>
— 正则的查找功能
// exec 方法, 返回找到的对象
/*
var s = "abcdfeg";
var r = new RegExp("e");
var m = r.exec(s); // 在 s 中找是否符合 r 的字符串, 如果找到返回找到的结果对象,
// 如果没有找到则返回 null
if (m) {
console.log(m[0] + ", " + m.index);
} else {
console.log("error");
}
*/
//把所有的数字的位置找出来
// 0123456789012
var s = "abcdefghijklmn12def3def",
m,
r = new RegExp("\\d+");
if (m = r.exec(s)) {
console.log(m[0] + ", " + m.index + ", " + m[0].length);
} else {
console.log("err");
}
//查找结果是:12,14,2
//因为不是全局的所以找到匹配的之后遇到不匹配的就不会再往下找了;