js正则

1.正则的声明和使用

通过构造函数定义

var 变量名= new RegExp(/表达式/);

通过直接量定义(简单方便,我们一般用这个)

var 变量名= /表达式/;

匹配模式:

i  区分大小写  把大写转换为小写  

g global 全局变量

常用方法,

test方法可用于检测传入的字符串是否包含符合该规则的字符串,并返回布尔值  

exp.test("要检测的字符串")

replace() 方法  替换   

字符串对象.replace(被替换正则式或字符串,替换的目标字符),返回值:替换后的新字符串

 

正则表达式格式:var 变量名= new RegExp(/表达式/, 修正符);

2.转义字符:

                 


3.\r,\n,\r\n的区别

在万恶的旧社会,打字机换行(\n newline)之后只会下移一行,需要回到一行的开头(\r return)才能继续打字

老式的操作系统也继承了打字机的这一特性,但用户换行之后一般都是要回到开头的,因此新式的操作系统为了方便将键盘上的Enter键的含义修改为\r\n或者直接将

\n的含义改为“移动到下一行的开头”

4.括号

()表示一组

[]表示一个字符的位置

{}表示次数


5.或运算符:| 表示或 ,或的优先级最低可以通过()提升优先级

eg.3> 5  | 3> 6

语法:  x | y    匹配 x 或 y 

在基础语法里面, 采取的措施就是, 要检测的对象, 只要有满足其中一个条件的对象,返回结果就为真。

console.log(/hei/.test("hei"));

console.log(/hei/.test("he"));

console.log(/hei/.test("heihei"));

console.log(/hei/.test("aheia"));

console.log(/hei/.test("aheaia"));

console.log(/andy|and/.test("andy"));

console.log(/andy|and/.test("and"));

console.log(/andy|and/.test("andandy"));

console.log(/andy|and/.test("any"));

console.log(/andy|and/.test("any"));

console.log(/food|foot/.test("foo"));

console.log(/food|t/.test("foo"));

console.log(/foo(d|t)/.test("foo"));

console.log(/foo(d|t)/.test("food"));

console.log(/foo(d|t)/.test("foot")); 

6.非运算符:^

^只有在[]内才表示非 ,在外边表示限制开始

/^abc/   和  /[^abc]/ 表达的意思是是不一样的

7.边界

^ :会匹配行或者字符串的起始位置,限制开头

注意,一个区别:  ^只有在[]内才表示非    在外边表示限制开始

/^abc/   和  /[^abc]/ 表达的意思是是不一样的

$ :会匹配行或字符串的结尾位置


^$在一起 表示必须是这个(精确匹配)

console.log(/^abc/.test("abc"));

console.log(/^abc/.test("abcd"));

console.log(/^abc/.test("aabcd"));

console.log(/^abc$/.test("abc"));

console.log(/^abc$/.test("abcd"));

console.log(/^abc$/.test("aabc"));

8.量词

 "*"  重复零次或更多   x>=0   贪婪

 "+"  重复一次或更多次x>=1  

 "?"  重复零次或一次  x=(0||1)

console.log(/^a*$/.test("a"));

console.log(/^a*$/.test("aa"));

console.log(/^abc*$/.test("ab"));

console.log(/^abc*$/.test("abcc"));

console.log(/^(abc)*$/.test("cd"));

console.log(/^(abc)*$/.test("ab"));

console.log(/^(abc)*$/.test("abcabc"));

{n}   n次  x=n

{n,}  重复n次或更多  x>=n

{n,m} 重复出现的次数,最少匹配 n 次且最多匹配 m 次

9.其他

- : 连接,表示a到b之间的区域,要在[]才是这个意思

10.预定义类:

.        [^\n\r]         除了换行和回车之外的任意字符

  \d    [0-9]          数字字符digit

  \D   [^0-9]         非数字字符

\w   [a-zA-Z0-9_]      单词字符(所有的英文字母数字和_)word

\W   [^a-zA-Z0-9_]     非单词字符   

  \s     [\f\r\n\t\v]   不可见字符   空白字符   space     

  \S    [^\f\r\n\t\v] 可见字符

11字符类

简单类[abc]  字符集合。匹配所包含的任意一个字符

console.log(/[abc]/.test("a"));

console.log(/[abc]/.test("b"));

console.log(/[abc]/.test("c"));

console.log(/[abc]/.test("ac"));

console.log(/[abc]/.test("d"));

 

负向类[^abc] 表示该位置不可以出现的字符  取反

console.log(/[^abc]/.test("a"));// false

console.log(/[^abc]/.test("b"));// false

console.log(/[^abc]/.test("c"));// false

console.log(/[^abc]/.test("ac")); // false

console.log(/[^abc]/.test("d"));  // true

 

范围类[a-e]  表示该位置可以出现的字符的范围

组合类[a-xA-E0-9] 范围类的组合

12.例子

验证密码强度

varinp1 =document.getElementById("inp1");

varstrength =document.getElementById("strength");

varstrengthLevel =document.getElementById("strengthLevel");

vararr = ["","低","中","高"];

inp1.onkeyup =function() {

varlv =0;

if (/[0-9]/.test(this.value)) {

lv++

}

if (/[a-z]/.test(this.value)) {

lv++

}

if (/[A-Z]/.test(this.value)) {

lv++;

}

strength.innerHTML =arr[lv];

strengthLevel.className ="strengthLv" +lv;

}


验证座机

匹配电话号码:

010-12345678

0313-1234567

开头3或4位(首位为0)

后面7或8位

 

varregexp = /^0\d{2,3}-\d{7,8}$/;


验证姓名 中文姓名  

只能是汉字    并且字数 2-6个之间

[\u4e00-\u9fa5]

unicode转中文可以用unescape()

unescape('\u4e00')

完整版表单验证


checkRE($("inp4"),regTel);

 

functioncheckRE(obj,regexp) {

obj.onblur =function() {

if (regexp.test(this.value)) {

this.nextSibling.innerHTML = "正确";

this.nextSibling.className = "right";

}else {

this.nextSibling.innerHTML = "错误";

this.nextSibling.className = "wrong";

}

}

}

 

验证邮箱:

/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;   这是照顾国外邮箱的完整写法

注意:字符放到 [] 内是不需要转义的  比如  \. 需要转义,  但是 [.+]  方括号里面的 . 和 + 就不需要转义了

13.常见项目的匹配

匹配国内电话号码:

 /^0\d{2,3}-\d{7,8}$/

匹配姓名:

 /^[\u4e00-\u9fa5]{2,}$/

匹配腾讯QQ号:

 /^[1-9]\d{4,10}$/

匹配手机号:

 /^(13[0-9]|14[57]|15[0-9]|18[0-9])\d{8}$/

匹配邮箱:

/^\w+([+-.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/