您现在的位置是:首页 > 文章详情文章详情

JavaScript 正则表达式(匹配,提取,替换)

会飞的猪 2018-12-09 801人已围观

简介白码驿站是一个面向开发者的知识共享社区,专注于为开发者打造一个纯净的技术交流社区(源码下载,免费在线图片压缩,jquery插件,插件下载,JS/CSS在线压缩。)-白码驿站

        正则表达式作为一种匹配处理字符串的利器在很多语言中都得到了广泛实现和应用,JavaScript作为一门常用于web开发的语言,必然要具备正则这种强大的特性,但是C#中正则表达式与JavaScript的语法大近相同, 不过也有不同之处,本文将对JS中的正则用法及常用函数进行一番总结。

正则匹配

创建正则对象(语法):

                                        
var regex = new RegExp("正则表达式字符串", "可选参数");
boolean regex.test(要匹配的字符串);
                                

举个例子:

                                        
var regex = new RegExp("^\\d+$"); //匹配一个数字字符
alert(regex.test("1abc2345"));
                                

上面的代码执行结果为:“false”。大家应该注意到, 上面的“\d”需要被转义, 使用起来并不是很灵活,不过js提供了一种简单的写法, 也可以实现。

简写:

在双斜线之间写正则表达式(\不用转义)

                                        
var r = /^\d+$/;
alert(r.test("1abc2345"));
                                


正则替换

       在js中替换是string的方法,string;在字面值右边的斜线后加上可选参数g就表示全局模式

举个例子:

                                        
var date = "2018年12月09日";
var res = date.replace(/(\d+)年(\d+)月(\d+)日/, "$1-$2-$3");
                                

上面的代码会将日期转换为“xxxx-xx-xx”格式,执行结果:"2018-12-09"。关于替换方法,如果第一个参数不是正则表达式对象,而是一个字符串,就执行字符串的简单替换

replace替换默认是替换第一个匹配到的字符, 如果需要匹配所有, 需要使用全局模式(g),

下面来举个例子:

                                        
var str1 = "1a2b3c4d";
alert(str1.replace(/\d+/, "白码驿站"));
                                

上面的代码执行结果是:“白码驿站a2b3c4d”,如果加上全局模式(g),(拓展:如果是i, 表示忽略大小写,m:多行模式)

                                        
var str1 = "1a2b3c4d";
alert(str1.replace(/\d+/g, "白码驿站"));
                                

上面的代码执行结果是:“白码驿站a白码驿站b白码驿站c白码驿站d”


正则提取

        像数组的对象 regex.exec(要提取的字符串);如果正则表达式中没有分组,使用返回值[0]得到匹配字符串 ;如果有分组,使用返回对象[i] 访问第i组;但是这个匹配只匹配一次

举个例子:

                                        
var str = "112233abc45678defg001234567df";
var regex = /(\d)(\d+)(\d)/;
var m = regex.exec(str);
                                

上面的语法对匹配的数据进行了分组,所以 索引为0 匹配到的是第一个匹配,1 , 2,3是获取配到的数据分组。听起来是不是挺拗口的,那就来看你一下执行结果吧。 

执行结果

var m[0]  返回 112233

var m[1]  返回 1

var m[2]  返回 1223

var m[3]  返回 3

如果使用下面的代码,只会匹配到一组数据

                                        
var regex = /\d+/;
var m = regex.exec(str);
                                

执行结果为

var m[0]  返回 112233,

如果需要循环匹配,将字符串中所有满足要求的数字提取出来,需要使用全局模式(g),并且每次执行exec提取一个,在执行exec提取下一个,直到提取完毕返回null

                                        
var m = regex.exec(str);  // 112233
alert(m[0]);
m = regex.exec(str);		// 45678
alert(m[0]);
m = regex.exec(str);		// 001234567
alert(m[0]);
m = regex.exec(str);		// null
alert(m);
                                

所以,如果想要匹配所有, 这里就需要循环去匹配了, 这里就不一一介绍了。




Tags: JavaScript/Jquery 、 正则表达式

很赞哦! (2)

系统处理中...