首頁  >  文章  >  web前端  >  JS的replace方法_javascript技巧

JS的replace方法_javascript技巧

WBOY
WBOY原創
2016-05-16 17:10:041231瀏覽

定义和用法
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;
   book; 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 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")       ","g"),function(){           
            for(var i=0;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了。
程式碼如下:


var strM = "javascript is a good script language";
//在此將字母a全部替換成字母A
alert(strM.replace(/a/g,"A"));



還可以這樣,看看效果吧!

複製程式碼 程式碼如下:

var strM = "javascript is a good script language";
alert(strM.replace(/(javascript)s*(is)/g,"$1 $2 fun. it $2"));



  我這兒舉的例子都是很簡單的應用,replace()在此點上與您使用正則表達式的能力成正比。您正規表示式越強,呵呵,那您就會越瘋狂的愛上它。
  當然,我這兒推薦replace()的原因並不是因為它能與正規表示式合作,而在於它還能與函數進行合作,發揮出強大的功能。
  先看看簡單例子:將所有單字首字母換成大寫。


複製程式碼 程式碼如下:
var strM = "javascript is a good script language";
function change(word)
{
 return word.indexOf(0).toUpperCase() word.substring(1);
}
alert(strM.replace(/bw b/g,change));



  由上可知,當正規表示式有"g "標誌時,代表將處理整個字串,即函數change的變換將應用於所有匹配的物件。而函數有三個或更多參數,具體個數視正規表示式而定。
  有了函數與正規表示式的配合,replace()處理字串的功能空前強大起來了!
  最後也舉個例子,將字串所有單字倒序,用replace()處理是如此簡單。



複製程式碼 程式碼如下:
var strM = "javascript is a good script language";
function change(word)
{
 var result = word.match(/(w)/g);
if ( result )
{
 var str = "";
  for ( var i=result.length-1; i>=0; i-- )
 {
   str = result  } return str;
}
else
{
  return "null";
}
}
alert(strM.replace(/b(w) b/b(w(w) b/b(w) ,change));



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn