js RegExp正则表达式,2种方式创建正则表达式及它的test(),match(),search(),test().split()方法

2017-11-4 13:16:11 3,448 views

正则表达式
正则表达式用于定义一些字符串的规则
计算机可以根据正则表达式,来检测一个字符串是否符合规则
获取将字符串中符合规则的内容提取出来
使用typeof检测正则,返回object
语法:
构造函数法
有点:更加灵活,可以传递变量
第一个参数为"字符串"或者正则表达式
var reg=new RegExp(正则表达式,"匹配模式");
var reg=new RegExp("字符串","匹配模式");
匹配模式可以是
i  忽略大小写
g  全局匹配
m 执行多行匹配
http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
*/
var reg=new RegExp("a","i");//检测字符串中是否含有a
alert(typeof reg);//object
var str="a";
正则表达式的方法
test()
使用这个方法可以用来检测一个字符串是否符合正则表达式的规则
如果符合则返回true,否则返回false;
console.log(reg.test(str));//true
console.log(reg.test("Abcbc"));//true
对象字面量
//更加简单
语法:var 变量=/正则表达式/匹配模式
var reg=/a/i; //i后面没有/
console.log(reg.test("abc"));
|表示或者 var reg=/a|b/i; console.log(reg.test("Bc"));//true
[]里面也表示或
[ab]表示a或者b
[a-z] 任意小写字母
[A-Z] 任意大写字母
[A-z] 任意字母:检测是否有字母 var reg=/[A-z]/i; 用 \w还包括_ console.log(reg.test("@"));//false
[0-9] 任意数字 \d
[^] 除了
[^ab] 没有a或者b var reg=/[^ab]/; console.log(reg.test("ab"));//false没有a或者b
split()方法
将一个字符串根据正则表达式的规则来拆分。
var str="1a2b3c4d5c";
var reg=/[A-z]/
// split 根据传递的正则表达式作为参数,根据正则表达式去拆分字符串。
console.log(str.split(reg));// ["1", "2", "3", "4", "5", ""]
search()方法:
只会查找第一个,即使设置了全局匹配
可以搜索字符串是否含有指定内容,有的话返回第一次出现的索引值,没有的话返回-1;
可以根据正则表达式作为参数,然后会根据正则表达式去检索字符串
var str="hello abc adc";
var result=str.search(/a[bef]c/);
console.log(result);//6 有abc返回abc的索引,没有的话返货aec或者afc的索引值
match():
若不指定为全局模式,则只会提取出一个a
可以从字符串中提取出符合规则的字符串,默认只会找到第一个符合的字符串
返回值为数组
var str="1a2b3c4d5c";
var result=str.match(/[A-z]/g);
console.log(result);//a
即全局又忽略大小写
var str="1a2b3c4d5c";
var result=str.match(/[a-z]/gi);
console.log(result);//["a","b","c","d","c"];
replace()
接受2个参数 :要被替换的内容,新的内容,默认只会替换第一个
可以将字符串替换为新的内容
var str="1a2b3ca4d5c";
console.log(str.replace("a","@"));//1@2b3ca4d5c
可以接受一个正则
var str="1a2b3ca4d5cABEC";
console.log(str.replace(/a/g,"@"));//1@2b3c@4d5c
删除以穿字符串中的所有字母
var str="1a2b3ca4d5cABEC";
console.log(str.replace(/[A-z]/g,""));//12345
量词
{n}正好出现n次
// {m,n} m-n次;
{m,} m次以上
n+ 匹配任何包含至少一个n的字符串 相当于 n{1,}
n* 匹配任何包含0或多个n的字符串
n?匹配任何包含0或一个n的字符串 /n?/
^n检测一个字符串是否以n开头 /^n/
[^]是除了
var reg=/^ac/ ,
console.log(reg.test("abcnb"));//false 必须ac
a$结尾 /a$/ 匹配结尾的a
/^a$/ 只能有一个a
转义字符
\. 检测一个字符串是否含有.
/./ var reg=/\./; //检测是否含有.
/ 则需要/\\/
\w 任意字母(word),数字,下划线== [A-z0-9_ ]
\W除了字母,数字,下划线== [^A-z0-9_ ]
\d 任意的数字(digital) [0-9]
\D 除了数字 [^0-9]
\s 空格 var reg=/\s/;alert(reg.test("1 "));//true
\S除了空格 var reg=/\S/;alert(reg.test(""));//false
alert(reg.test(" "));//false
alert(reg.test("352 "));//true
\b 单词边界
var reg=/\bchild\b/;alert(reg.test("hello child hi"));//true
alert(reg.test("hellochildhi"));//false;
即所要查找的字符前后是否跟有其他字符
\B除了单词边界
var reg=/a{3}/;// console.log(reg.test("aaabc"));//true 是否连续有3个a
reg=/ab{3}/;console.log(reg.test("ababab"));//false,是否a后面跟着3个b,量词只对它前面的一个内容起作用
reg=/(ab){3}/;console.log(reg.test("ababab"));//true 是否连续有3个ab
var reg=/ab{1,3}c/;console.log(reg.test("abbbbc"));//false//ac之间是否跟着1-3个b
var reg=/\\/;表示字符串中是否还有\,因为\需要转义所以为\\
console.log(reg.test("\\"));//true这里需要2个\\来表示已个\ ,需要转义
var reg=/\./;//表示字符串中是否含有点,字面量表示的时候输出点只需要一个转义\
reg=/\\/;
reg=new RegExp("\\.");//在构造函数中转义需要2个\\
console.log(reg.test("dsg23###%"));
案例1:去除字符串前后空格
var str=" hello "
//去除字符串前后的空格
//去除空格就是用""来替换空格
// console.log(str);
var str=" hello "
str=str.replace(/\s/g,"");
console.log(str); //hello 这会替换所有的空格,如果不想要去除字符串之间的空格, hel lo,则这种方法就不符合了
//去除开头的空格
//str=str.replace(/^\s*/,""); //^开头, *表示0或多个,即表示去除前面的任何空格
//去除结尾的空格
//str=str.replace(/\s*$/,"");
// /^\s*|\s*$/g匹配开头和结尾的空格
var str=" he llo "
str=str.replace(/^\s*|\s*$/g,"");
console.log(str);//he llo
案例2:邮件的正则表达式
hello .nihao @ abc .com.cn
任意字母数字下划线 .任意字母数字下划线 @ 任意字母数字 .任意字母{2-5位} .任意字母{2-5位}
\w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
\w{3,} 任意字母3位以上
(\.\w+)* 任意字母或者数字且长度不限,一次以上,整个内容可有可无*
[A-z0-9]+ 字母或者数字1次以上
(\.[A-z]{2,5}){1,2} 整体可以出现1-2次
整合
/^\w{3,}(\.\w+)*@ [A-z0-9]+(\.[A-z]{2,5}){1,2}$/;

0

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。