javascript正则表达式

正则表达式:一种用于匹配特殊字符的逻辑表达式。

var str = "hello__world中HELLO __ WORLD国 - width is 100 ok!";

var result = str.match("o"); // 匹配给定的字符串,匹配到就会立刻停止。返回一个数组

// result = str.search("o"); // 查询给的字符,匹配到就会返回字符所在的索引,没有就返回-1;

// match(reg),search(reg),replace(reg,"")可以传递一个正则表达式对象

console.log(result);

1. 要借助正则表达式对象创建正则表达式 RegExp(pattern,modifiers);

patter 正则表达式

modifiers 修饰符

g 全局匹配,把整个字符串查询完。这里会返回字符串里面所有的o字符

i 不区分大小写,不管大写字母,小写字母都可以匹配出来。

m 多行匹配,匹配多行字符串。

var patter = "o";

var reg = new RegExp(patter,"gi"); // 创建一个匹配o的正则表达式对象。匹配o的字符

var reg1 = /o/gi; // 快捷创建正则对象的方式,表达式不能用变量。

result = str.match(reg1); // 把正则表达式对象传给match,match可以按正则表达式逻辑匹配字符。

 2. 正则表达式的模式

[wo] 范围查询,查询[]里面的任何字符。 查询[]里面的w或者o

[a-z] 查询 - 之间的连续内容, 查询a-z之间的任意字符,[A-z] 可以查询所有的大小写字母,[0-9]查询所有的数字,[a-z0-9]查询所有的字母和数字

(a|b) 查询以|分隔的任意选项。可以理解为或的意思。

 [^wo] 匹配除wo以外的任意字符

var reg2 = /[a-z0-9]/gi;

var reg3 = /(hello)|(is)/gi;

var reg3a = /[^wo]/gi;

result = str.match(reg3a);

console.log(result);

3. 元字符

 \d 匹配所有的数字

 \D 匹配除了数字以外的任意字符

 \w 匹配数字,字母,_

 \W 匹配非数字,字母,_的字符

 \s 匹配空白字符

var reg4 = /\d/g;

var reg5 = /\D/g;

var reg6 = /\W/g;

var reg7 = /\s/g;

// console.log(str.replace(reg7,""));

// console.log(str.match(reg6));

 4. 匹配中文字符,一般匹配所有中文字符要去匹配中文字符对应的Unicode编码。

 u Unicode编码匹配修饰符。

var reg8 = /\p{Unified_Ideograph}/gu;

result = str.match(reg8);

console.log(result);

 5. 量词,匹配字符出现的次数。可以开启贪婪模式(匹配符合规则最多字符)

o+ 匹配至少1个x以上的字符

o* 匹配0(包含0)个以上的字符

o? 匹配0个或者1个

{min,max} 自定义匹配数量,min是最小匹配的数量,max是最多匹配的数量

o{3} 匹配3个o,指定匹配数量

o{1,} 和+一样,1个o以上

var str1 = "go google gooogle boold";

var reg9 = /go{0,3}/g;

result = str1.match(reg9);

console.log(result);

6. 正则转义符,有一些特殊符号是正则表达式的语法,要匹配这些特殊符号就要用 \转义。

var str = "hello[]33234";

var reg11 = /\[\]/g;

console.log(str.match(reg11));

7. 常用的特殊字符

 ^h 匹配字符串的开头(这里是匹配以h字符开头)。

h$ 匹配以某个字符结尾(这里就是匹配以h结尾的字符);

. 匹配任意字符,如果要匹配.,则要用转义符如: reg = /\./g

var str3 = " hello world.com";

console.log(str3.match(rega));

var rega = /d$/;

用户名的规则: 必须以字母开头,长度在4-6个字符之间的字母,数字或者下划线。

var regb = /^[A-z]\w{3,5}$/;

console.log(regb.test("c235b5"));

reg = /./g;

console.log(str3.match(reg),"点");

8. test()方法,可以验证字符串是否符合一个正则。符合规则返回true,不符合返回false;

var regc = /ae/g;

// console.log(regc.test(str3)); // str3里面不包含ae,返回false

9. 断言(环视),预判字符的某个位置是指定的字符。

0宽断言,预判字符是否存在,但是不会显示出来

var str = "hell1o123 helloworld hello10-";

01. o(?=exp) 0宽度正预测(先行断言),字符o后面能发匹配表达式(如果匹配只会返回o,表达式的匹配不会返回);

匹配后面有123的o字符

var reg = /hello(?=123)/g;

var reg1 = /o(?=[A-z]+)/g; // 匹配后面紧接着字母的o

console.log(str.match(reg1));

02. o(?!exp) 0宽度负预测先行断言。o后面不挨着某个表达式的正则,不会返回断言的内容

reg = /o(?!\d+)/g;

console.log(str.match(reg));

03. 零宽度正回顾断言 (?<=exp)

reg = /(?<=[A-z])o/g; // 匹配前面挨着字母的o,不会返回返回断言的内容。

console.log(str.match(reg));

04. 零宽度正回顾断言不匹配 (?
reg = /(?

复杂密码校验:必须包含至少包含一个数字、字母、下划线的组合,长度是3-6位置。

    /* 以字母开头,必须包含数字,字母,_(下划线)的组合,长度是6-10位。 */

    var reg = /^(?=.*[a-z])(?=.*\d)(?=.*_)[a-z]\w{5,9}$/gi;

你可能感兴趣的