js正则表达式replace,replace 正则,详解JS正则replace的使用方法

js正则表达式replace,replace 正则,详解JS正则replace的使用方法

本文主要详细介绍javascript正则替换的用法。感兴趣的朋友可以参考一下。

在讲replace的高级应用之前,我们先简单梳理一下JS正则中的几个重要知识点,帮助大家复习一下基础知识,然后讲解一下JS正则表达式在replace中的用法以及几个常见的经典案例。

一、正则表达式的创建

创建JS规则有两种方法:new RegExp()和直接文字。

//使用RegExp对象创建

var regObj=新RegExp('(^\s )|(\s $)',' g ');

//使用直接文字创建

var regstr=/(^\s)|(\ s $)/g;

g代表全文匹配,I和M与之相关。I代表匹配时忽略大小写,M代表多行匹配。如果同时使用多个条件,则写成:gmi。

二、()、[]、{} 的区别

函数的作用是提取匹配的字符串。如果表达式中有几个(),就会得到几个对应的匹配字符串。例如,(\s)表示一串连续的空格。

[]是定义匹配的字符范围。例如,[a-zA-Z0-9]表示字符文本应该匹配英文字符和数字。

{}一般用来表示比赛的长度。例如,\d{3}表示匹配三个空格,\d[1,3]表示匹配一到三个空格。

三、^ 和 $

匹配字符串的开头,例如,(A)是匹配以字母A开头的字符串。

$匹配字符串的结尾,例如(b$)匹配以字母b结尾的字符串。

还有一个反转的功能,比如[xyz]表示匹配的字符串不包含xyz。

需要注意的是:如果出现在[],一般表示倒装句,如果出现在别处,则是匹配字符串的开头。

四、\d \s \w .

\d匹配一个非负整数,相当于[0-9]

\s匹配一个空白字符。

\w匹配一个英文字母或数字,相当于[0-9a-zA-Z]。匹配除换行符之外的任何字符,换行符相当于[\ n]

五、* + ?

*表示前一个元素匹配了0次或更多次,例如,(\s*)表示匹配了0个或更多空格。

表示匹配前一个元素一次或多次,例如,(\d)表示匹配至少由一个整数组成的字符串。

?表示前一个元素匹配0次或1次,相当于{0,1},比如(\w?)匹配最多由1个字母或数字组成的字符串。

六、test 、match

前面的大多是JS正则表达式语法,而test是用来检查一个字符串是否匹配正则表达式。如果是,则返回true,否则返回false。

/\d /。测试(' 123 ');//真

/\d /。测试(' ABC ');//假

Match是常规匹配的结果,作为数组返回。

186a619b28 '。match(/\ d/g);//['186','619','28']

以上基本是我经常用到的基础知识,但不是很全面。不常用的就不列了,因为只是摆设,但是混淆了主次!

七、replace

Replace本身是JavaScript string对象的一个方法,它允许接收两个参数:

替换([正则表达式|字符串],[字符串|函数])

第一个参数可以是普通字符串或正则表达式。

第二个参数可以是普通的字符串或回调函数。

如果第一个参数是RegExp,JS会先提取RegExp的匹配结果,然后用第二个参数逐个替换匹配结果。

如果第二个参数是一个回调函数,它将在每次匹配结果时被回调,并且每次都将传递以下参数:

结果:本次匹配的结果。

$1,$9:如果正则表达式中有几个(),则传递几个参数。$1~$9分别代表本次匹配中each()提取的结果,最多9个。

Offset:记录这场比赛的开始位置。

Source:接受匹配的原始字符串。

下面是一些经常使用replace和JS的常见经典案例:

(1)实现字符串的trim功能,去掉字符串两边的空格。

string . prototype . trim=function(){

//方法1:用“”替换所有匹配的结果

返回this.replace(/(^\s )|(\s $)/g,function(){

返回“”;

});

//模式二:原理和模式一一样。

return this.replace(/(^\s)|(\ s $)/g,' ');

};

\ s表示以空格开头的连续空白字符,\s $表示以空格结尾的连续空白字符,添加()提取匹配结果。因为是|,所以这个表达式最多匹配两个结果集,然后执行两次替换:

string . prototype . trim=function(){

/**

* @param rs:匹配结果

* @param $1:第一个()提取结果

* @param $2:第二个()提取结果

* @param offset:匹配开始位置

* @param source:原始字符串

*/

this.replace(/(^\s )|(\s $)/g,function(rs,$1,$2,offset,source){

//arguments中的每个元素对应一个参数。

console.log(参数);

});

};

abcd '。trim();

输出结果:

[' ',' ',未定义,0,' abcd '] //第一个匹配结果

[' ',未定义,' ',5,' abcd '] //第二个匹配结果

(2)从浏览器url中提取参数名称和值,以生成键/值对象

函数getUrlParamObj(){

var obj={ };

//获取url的参数部分

var params=window . location . search . substr(1);

//[=]表示连续字符,不带or=,加号()是提取相应的字符串。

params.replace(/([^=])=([^=]*)/gi,function(rs,$1,$2){

obj[$ 1]=$ 2;

});

返回obj

}

/([=])=([=] *)/GI每次匹配一个完整的键/值,比如xxxx=xxx。每当这样的结果匹配时,就会执行回调,传递匹配的键和值,对应于$1和$2。

(3)在字符串的指定位置插入一个新字符串。

string . prototype . insetat=function(str,offset){

//使用RegExp()构造函数创建正则表达式

var regx=new RegExp((。{ ' offset ' })');

return this.replace(regx,' $ 1 ' str);

};

abcd '。instat(' XYZ ',2);//在B和c之间插入xyz。

abxyzcd '

当offset=2时,正则表达式为:(。{2}).这意味着除了\n后面跟{2}的任何字符都匹配由数字或字母组成的前两个连续字符。add()会提取匹配的结果,然后通过replace用新的字符串替换匹配的结果,比如:result=result str。

(4)将手机号码1298886666转换成1298886666。

功能电话格式(电话){

tel=String(电话);

//模式1

return tel . replace(/(\ d { 3 })(\ d { 4 })(\ d { 4 })/,function (rs,$1,$2,$3){

返回$1 ' ' $2 ' ' $3

});

//模式2

return tel . replace(/(\ d { 3 })(\ d { 4 })(\ d { 4 })/,' $ 1 $ 2 $ 3 ');

}

(\d{3}\d{4}\d{4})可以匹配完整的手机号码,分别提取前3位、4-7位和8-11位。$1 $2 $3 '是在三个结果集之间加空格形成新的字符串,然后替换完整的手机号。

(5)实现函数escapeHtml对、'进行转义。

函数escapeHtml(str) {

//匹配'

return str.replace(/[']/g,function(rs) {

开关(rs) {

案例“”:

return ' lt';

案例“”:

return ' gt';

案例“”:

返回' amp';

案例' ' ' ':

返回“quot”;

}

});

}

这就是本文的全部内容,希望对大家的学习有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: