我们首先了解一下正则表达式 和一些规则
正则表达式:由一些普通字符和元字符组成,特殊字符有 \ 、()、 []、 {}、^、$、 |、 ?、 *、 +
-
精确匹配:匹配字符串一些固定值或常量
/good/.text("adsafasdfsafgoodffafa"); // true
精确匹配不能使用一些特殊的预定义特殊符号 -
预定义特殊符
- \t /\t/ 制表符
/\t/.test(" ") // true test里的内容为tab 不是空格
- \n /\n/ 回车符
/\n/.test('aaa bbb') // true test里aaa 和 bbb 之间为回车 这里的' 为键盘数字1之前的按键
- \b /\b/ 空格符
/\n/.test('aaa bbb') // true aaa和bbb之间有空格
- \t /\t/ 制表符
-
字符集
- 一些字符的集合,这些字符放在[ ]内
var str = "afg"
/[abc]/.test(str) // true 证明中括号内的字符只要有一个出现在str中就是true
-
范围类 :有时匹配太多,并且类型也一样 ,可以使用
[0-9] | [a-z] | [A-Z]
-
组合类 :
[0-9a-zA-Z]
既可以匹配数字,也可以匹配大小写字母 -
负向类 :
[^]
表示匹配的字符串不能出现/[^abc]/.test("abc") // false
-
修饰符 :
- g 全局匹配
/.../g
- i 忽略大小写
/.../i
- g 全局匹配
-
边界
- ^ 开头 与
[^0-9]
不一样,书写位置在正则表达式的开头/^hi/.test("hi,hello") // true || /^hi/.test("hb,hello") // false
- $ 结尾,书写在正则表达式的末尾
/javascript$/.test("hello,javascript") // true || /javascript$/.test("hello,java") // false || /javascript$/.test("hello,script") // false
^ 与 $ 同时使用 限定了匹配内容的开头与结尾
/^hello\s+javascript$/.test("hello javascript") // true /^hello\s+javascript$/.test("hello our javascript") // false
\b 单词边界,查找位于单词的开头或结尾的匹配
\w 预定义类 代表单词字符 字母 下划线 数字
"i love javascript very much".match(/\b\w+\b/g); // 输出为["i", "love", "javascript", "very", "much"]
\B 非单词边界 查找位于不处在单词的开头或结尾的匹配
"i love javascript very much".match(/\B\w+\B/g); // 输出为["ov", "avascrip", "er", "uc"]
- ^ 开头 与
-
预定义类
[^\n\r] // 不是回车和换行
\d 等价于 [0-9]
数字字符/^\d+$/.test("123456") // true
但是/^\d+$/.test("123 456") // false
\D 等价于 [^0-9]
非数字字符
\s
空白字符
\S
非空白字符
\w
代表单词字符 字母 下划线 数字
\W
非单词字符 字母 下划线 数字 -
量词
{n}
出现n次/^a{3}bc$/.test("aaabc"); // true
但是/^a{3}bc$/.test("aabc"); // false
||/^a{3}bc$/.test("aaaabc"); // false
这个是因为结束时必须时bc
这个例子是abc
{n,m}
至少出现n次,最多出现m次
{n,}
至少n次,多了不限
+
等价于{1,}
?
出现零次或一次 等价于{0,1}
*
出现任意次数 等价于{0,}
练习/bye{2}/.test("byebye"); // false
原因是{}对前面一个字符匹配 -
分组
练习/bye{2}/.test("byebye"); // false
让这个为true 就要进行分组 写成/(bye){2}/.test("byebye"); // true
-
或操作符
| 竖线/a|bcd/.test("a") // true
这个可以分析为 有a 或者是bcd 所以为true
/(ab|cd)ef/.test("ab") // false abed | cdef 才是正确的
/0[0-9]|(1|2)[0-9]/.test("08") // true 18 | 28都是正确的
-
分组反向引用
正则表达式中的匹配组捕获的字符串进行编号,这个具体的意思就是说拿到匹配的内容对接下来的内容再次进行匹配。先上例子:/^(\w{3})\1$/.test("abcdef") // false /^(\w{3})\1$/.test("abcabc") // true
-
中文字符集
[\u400-\u9fa5]+ 多个文字
网友评论