您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JS的replace方法_javascript技巧

2024/5/6 13:20:01发布22次查看
定义和用法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法
stringobject.replace(regexp/substr,replacement)
参数描述
regexp/substr 必需。规定子字符串或要替换的模式的 regexp 对象。
请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 regexp 对象。
replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
返回值一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
说明字符串 stringobject 的 replace() 方法执行的是查找并替换的操作。它将在 stringobject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
字符替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。
注意:ecmascript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringobject 中出现的位置。最后一个参数是 stringobject 本身。
更多基础实例可以到这里查看:http://www.jb51.net/w3school/js/jsref_replace.htm
replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数 是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringobject 中出现的位置。最后一个参数是 stringobject 本身。
下文展示了几种javascript正则表示式的repalce方式,有些方式我们很少在别的地方看到,如第二种和第三方中方法。
复制代码 代码如下:
//下面的例子用来获取url的两个参数,并返回urlrewrite之前的真实url
var reg=new regexp((http://www.qidian.com/bookreader/)(\\d+),(\\d+).aspx,gmi);
var url=http://www.qidian.com/bookreader/1017141,20361055.aspx;//方式一,最简单常用的方式
var rep=url.replace(reg,$1showbook.aspx?bookid=$2&chapterid=$3);
alert(rep);
//方式二 ,采用固定参数的回调函数
var rep2=url.replace(reg,function(m,p1,p2,p3){return p1+showbook.aspx?bookid=+p3+&chapterid=+p3});
alert(rep2);
//方式三,采用非固定参数的回调函数
var rep3=url.replace(reg,function(){var args=arguments; return args[1]+showbook.aspx?bookid=+args[2]+&chapterid=+args[3];});
alert(rep3);
//方法四
//方式四和方法三很类似, 除了返回替换后的字符串外,还可以单独获取参数
[code]
var bookid;
var chapterid;
function captext()
{
    var args=arguments;
    bookid=args[2];
    chapterid=args[3];
    return args[1]+showbook.aspx?bookid=+args[2]+&chapterid=+args[3];
}
var rep4=url.replace(reg,captext);
alert(rep4);
alert(bookid);
alert(chapterid);
//除了使用replace方法获取正则表示式的分组外,还可以使用test ,exec方法获取分组,只是手法有所不同而已
var reg2=new regexp((http://www.qidian.com/bookreader/)(\\d+),(\\d+).aspx,gmi);
var m=reg2.exec(http://www.qidian.com/bookreader/1017141,20361055.aspx);
var s=;
//获取所有的分组
for (i = 0; i       s = s + m[i] + \n;     
      }
alert(s);
bookid=m[2];
chapterid=m[3];
alert(bookid);
alert(chapterid);
//使用test方法获取分组
var reg3=new regexp((http://www.qidian.com/bookreader/)(\\d+),(\\d+).aspx,gmi);
reg3.test(http://www.qidian.com/bookreader/1017141,20361055.aspx);
//获取三个分组
alert(regexp.$1);
alert(regexp.$2);
alert(regexp.$3);
    var str=www.baidu.com;
        //str.format(好,q)       
        str.replace(new regexp((\\.)(bai)du,g),function(){           
            for(var i=0;i            {
                    document.write(arguments[i]+
);
            }
            document.write(-------------------------------------------------
);
        });
两个例子(证明,replace传入正则参数和字符传参数结果不同):
alert(123.replace(1,function(){var un;return un;}));  //弹出undefined23
alert(123.replace(new regexp(1),function(){var un;return un;}));  //弹出23
一些实例介绍:
replace()最简单的算是能力就是简单的字符替换。例如:
[ctrl+a 全选 注:如需引入外部js需刷新才能执行]
我想大家运行后可以看到结果,它只替换了首字母。但如果加上正则表达式结果就不一样了!replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换!
[ctrl+a 全选 注:如需引入外部js需刷新才能执行]
但是结果还是没有更改,如果您熟悉正则,那这就难不住您。稍加修改就ok了。
复制代码 代码如下:
还可以这样,看看效果!
复制代码 代码如下:
我这儿举的例子都是很简单的应用,replace()在此点上与您使用正则表达式的能力成正比。您正则表达式越强,呵呵,那您就会越疯狂的爱上它。
当然,我这儿推荐replace()的原因并不因为它能与正则表达式合作,而在于它还能与函数进行合作,发挥出强大的功能。
先看看简单例子:将所有单词首字母换成大写。
复制代码 代码如下:
由上可知,当正则表达式有g标志时,代表将处理整个字符串,即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数,具体个数视正则表达式而定。
有了函数与正则表达式的配合,replace()处理字符串的功能空前强大起来了!
最后还举个例子,将字符串所有单词倒序,用replace()处理是如此简单。
复制代码 代码如下:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product