欢迎来到 jackNEss'窝窝
I like simple mind

replace 的一些事一些情

2011年11月16日

有一定 javascript 基础的童鞋,对 String 对象中的 replace() 方法应该不陌生,这篇文章说说这个比较常用的方法的一些不常用的东西,嘿。

replace方法基础部分

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

replace() 语法

//javascript document
stringObject.replace(regexp/substr,replacement)
参数 描述
regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

replace() 返回值

一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

下面简单举个例子:

//javascript document
var str = "Hello jackENss~";
alert( str.replace(/EN/g,"NE") );//结果 Hello jackNEss~

$1,$2,$3,$4,…$n

replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符 替换文本
$0、$2、…、$n 与 regexp 中的第 0 到第 n 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$’ 位于匹配子串右侧的文本。
$$ 直接量符号。
//javascript document
var str = "Hello jackNEss~";
alert( str.replace(/jackNEss/g,"my dear " + "$0") );//结果 Hello my dear jackNEss~
alert( str.replace(/jackNEss/g,"$`" + "jessica") );//结果 Hello Hello jessica~
alert( str.replace(/jackNEss/g,"$'" + "") );//结果 Hello ~~

但是这样的 $0,$1 是存在局限性的,当要进行多个匹配的时候,这个必须要动态解决而不能采取 $0,$1这种形式。下面介绍的就是这种需求的解决方案。

replace(reg,function(){})回调函数中 arguments所代表的意义

ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。

arguments[n] 意义
arguments[0] 匹配模式的字符串。
arguments[1] 模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数
arguments[2] 整数,声明了匹配在 stringObject 中出现的位置。
arguments[3] stringObject 本身
//javascript document
var str = "Hello jackNEss ~ jackNEss ~ ";
alert( str.replace(/jackNEss/g,function(){ return "my dear " + arguments[0]}) );//结果 Hello my dear jackNEss ~ my dear jackNEss~

下面是一个应用到这方面知识的一个小例子:

演示地址:http://www.jackness.org/lab/replace/demo.html

附录:js中用到正则表达式的函数简介

下面是梳理知识的时候整理的,在javascript 中 能用得到 正则表达式的地方。

RegExp对象

RegExp 对象用于存储检索模式。

用法是 通过 new 关键词来定义 RegExp 对象。下面用 replace为例:

//javascript document
var reg = new RegExp("jackENss","g");
var str = "hello jackENss,where is jessica?";
alert(str.replace(reg,"jackNEss"));//结果: hello jackNEss,where is jessica?

RegExp 对象的方法:test()

test() 方法检索字符串中的指定值。返回值是 true 或 false。

//javascript document
var reg = new RegExp("^[A-Za-z0-9_]{6,12}$","g");
var str = "jackNEss";
alert(reg.test(str));//结果: true

RegExp 对象的方法:exec()

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

//javascript document
var reg = new RegExp("[a-zA-Z]","g");
var str = "jackNEss,you are good man,but...";
alert(reg.exec(str));//结果:j

RegExp 对象的方法:compile()

compile() 方法用于改变 RegExp。

//javascript document
var reg = new RegExp("^[A-Za-z0-9_]{6,12}$","g");
var str = "jackNEss";
alert(reg.test(str));//结果: true

reg.compile("[0-9]","g");//此时 正则已改变为 /[0-9]/g
alert(reg.test(str));//结果: false

String 对象的方法:match()

match() 用于查找字符串中特定的字符,并且如果找到的话,则返回这个字符。如果找不到,返回 null

//javascript document
var str = "hello jackNEss,where is jessica?";
alert(str.match(/jackness/ig));//结果:jackNEss

String 对象的方法:replace()

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

//javascript document
var str = "hello jackENss,where is jessica?";
alert(str.replace(/jackENss/g,"jackNEss"));//结果:hello jackNEss,where is jessica?

String 对象的方法:search()

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。返回值为第一个匹配字符的开始位置,如果没有的话返回-1。

//javascript document
var str = "hello jackENss,where is jessica?";
alert(str.search(/jackENss/g));//结果:6
分类javascript
标签
阅读 1,483
  • 评论加载中...

标签云

分类目录

最新留言

  • 评论加载中...

与我联系

如有疑问or建议可通过以下方式跟我取得联系.

Q Q:373435871
Email:jackness1208@gmail.com
© Copyright 2011 - 2014 jackNEss.org All Rights Reserved 粤ICP备14065612号
首页 | 关于我 | 网站地图 | RSS