js正则详解

1.正则的匹配模式(修饰符)

    g:全局模式;

    i:不区分大小写模式;

    m:多行模式;

2.需要转义的元字符

    ( ) [ ] { } \ | ^ $ ? * . + 

3.正则中各个符号的表示含义及量词:

    方括号:

[abc]查找方括号之间的任何字符。
[^abc]查找任何不在方括号之间的字符。
[0-9]查找任何从 0 至 9 的数字。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。

    元字符:(简化表达式,若不加入量词,表示单个字符)

.查找单个字符,除了换行和行结束符。
\w查找单词字符。  word  由字母、数字、_组成 ,等价于 [a-zA-Z0-9_]
\W查找非单词字符。  
\d查找数字。  digit  等价于  [0-9]
\D查找非数字字符。  等价于  [^0-9]
\s查找空白字符。   space
\S查找非空白字符。  
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NUL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。    中文字符

    量词:

n+匹配任何包含至少一个 n 的字符串。  >=1
n*匹配任何包含零个或多个 n 的字符串。 >=0
n?匹配任何包含零个或一个 n 的字符串。 0|1
n{X}匹配包含 X 个 n 的序列的字符串。  x
n{X,Y}匹配包含 X 到Y 个 n 的序列的字符串。 x<=   <=y   
n{X,}匹配包含至少 X 个 n 的序列的字符串。 >=x
n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。
?=n匹配任何其后紧接指定字符串 n 的字符串。
?!n匹配任何其后没有紧接指定字符串 n 的字符串。

    逻辑运算

X正则Y正则表示X正则之后紧跟着验证Y正则
X正则|Y正则表示两个正则选一个
()表示一组正则

4.正则编写

    如:

/**
 * 匹配所有以at结尾的3个字符的组合 的正则实例方式
 * @type {RegExp}
 */
var reg_1 = /.at/g;
var reg_2 = new RegExp('.at','g');
/**
 * 匹配协议的正则
 * @type {RegExp}
 */
var tcp = /^((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)|)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;  

5.正则的常用方法-----exec()和test()

    exec() :

        接受一个字符串参数,返回包含第一个匹配项信息的数组,或者在没有匹配项的情况下放回null;

    如:

var reg = /.at/g;
var reg_1 = /.klkl/g;
var str = ',cat,fjl,hat,dfdf,djkf';
var a = reg.exec(str);
console.log(a);  //["cat", index: 1, input: ",cat,fjl,hat,dfdf,djkf"]
console.log(a.index);  //1
console.log(a[0]);  //cat
console.log(a.input);  //,cat,fjl,hat,dfdf,djkf
console.log(reg_1.exec(str)); //null

    test() :

        接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false;

var reg = /.at/g;
var reg_1 = /.klkl/g;
var str = ',cat,fjl,hat,dfdf,djkf';
console.log(reg.test(str));  //true
console.log(reg_1.test(str));  //false


6.字符串中使用正则的方法----match(),search(),replace(),

    match()和正则的exec()相同

    search():

        传入一个正则为参数,从字符串的开头去匹配,匹配到返回1,否则返回-1;

    如:

var reg = /.at/g;
var reg_1 = /.klkl/g;
var str = ',cat,fjl,hat,dfdf,djkf';
console.log(str.search(reg)); // 1
console.log(str.search(reg_1)); // -1

    replace() :

        传两个参数,第一个参数为正则或字符串,第二个参数为要替换成的字符串或者是一个函数;

        (1)第一个参数为字符串时,只替换第一次匹配到的:

    如:

        

var str = ',cat,fjl,hat,dfdf,djkf';
console.log(str.replace('at','我是替换后的'));  //,c我是替换后的,fjl,hat,dfdf,djkf

         (2) 第一个参数为正则,若是全局的就将所有匹配到的都替换了,否则也只是替换第一个:

    如:

var reg = /.at/g;
var reg_1 =  /.at/;
var str = ',cat,fjl,hat,dfdf,djkf';
console.log(str.replace(reg,'我是替换后的'));  //,我是替换后的,fjl,我是替换后的,dfdf,djkf
console.log(str.replace(reg_1,'我是替换后的')); //,我是替换后的,fjl,hat,dfdf,djkf

    (3)第二个参数是一个函数,在匹配时会向该函数传递三个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串; 

      如:

    

var reg = /.at/g;
var reg_1 =  /.at/;
var str = ',cat,fjl,hat,dfdf,djkf';
var s = str.replace(reg_1,function (match,pos,originalText) {
    console.log(match);  //cat
    console.log(pos);  //1
    console.log(originalText);  //,cat,fjl,hat,dfdf,djkf
    console.log('--------');
    return '我是替换后的'
});
console.log(s);  //,我是替换后的,fjl,hat,dfdf,djkf

    一道面试题:将 '这是一个[笑脸],这是一个[哭脸]'变成 '这是一个:),这是一个:('。

var obj = {
    '[笑脸]' : ':)',
    '[哭脸]' : ':('
};
var str = '这是一个[笑脸],这是一个[哭脸]';
var reg = /\[[\u4e00-\u9fa5]+\]/g;  //匹配中文字符
function replaceString(reg,str,obj) {
    return str.replace(reg,function (match,pos,originalText) {
        return obj[match];
    });
}
console.log(replaceString(reg,str,obj));  //这是一个:),这是一个:(





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值