正则作为前端开发绕不开的东西,既麻烦又苦恼,自己看着都繁琐,不想写,话不多说
1.正则是匹配模式,要么匹配字符,要么匹配位置。
一:匹配字符:1.横向模糊匹配 横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的。 其实现的方式是使用量词。譬如 {m,n},表示连续出现最少 m 次,最多 n 次。 比如正则 /ab{2,5}c/ 表示匹配这样一个字符串:第一个字符是 "a",接下来是 2 到 5 个字符 "b",最后 是字符 "c"。
2纵向模糊匹配: 纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种 可能。 其实现的方式是使用字符组。譬如 [abc],表示该字符是可以字符 "a"、"b"、"c" 中的任何一个。 比如 /a[123]b/ 可以匹配如下三种字符串: "a1b"、"a2b"、"a3b"。
字符组:范围表示用-,排除表示用^,常见的简写字符组如下:
量词:
用|表示多选分支;
比如匹配日期:yyyy-mm-dd
var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
console.log( regex.test("2017-06-10") );
// => true
二,位置匹配:共有六个锚 ^ 、 $ 、 \b 、 \B 、 (?=p) 、 (?!p)
^ (脱字符)匹配开头,在多行匹配中匹配行开头。
$(美元符号)匹配结尾,在多行匹配中匹配行结尾。
\b 是单词边界,具体就是 \w 与 \W 之间的位置,也包括 \w 与 ^ 之间的位置,和 \w 与 $ 之间的位置。
\B 就是 \b 的反面的意思,非单词边界。例如在字符串中所有位置中,扣掉 \b,剩下的都是 \B 的。
(?=p),其中 p 是一个子模式,即 p 前面的位置,或者说,该位置后面的字符要匹配 p。 比如 (?=l),表示 "l" 字符前面的位置
而 (?!p) 就是 (?=p) 的反面意思
()代表小分类,在一起,赋予了正则强大的匹配功能
三,原则: 正则不是万能的,有很多正则匹配不了的,比如匹配1010010001---1
正则不能乱用,能用js方法解决的就不用正则,比如排序,分割字符等等
正则的使命是尽量准确,但他是有边界的,只能尽可能的覆盖,尽量保证准确,达到预期的结果
化繁为简,分割,是百变不离其一的宗旨,正则也是这样,把复杂的拆解成简单的,不断优化,