技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

js正則表達(dá)式replace里有變量的解決方法用到RegExp類

作者:admin    時(shí)間:2013-10-12 15:41:38    瀏覽:

 一直比較害怕使用正則表達(dá)式,貌似很深?yuàn)W很復(fù)雜的樣子,所以在用js操作字符串的時(shí)候,我最多使用的是replace、split、substring、indexOf等函數(shù),這些函數(shù)有時(shí)候需要多次疊加使用,但是用起來(lái)比較簡(jiǎn)單,語(yǔ)法和書(shū)寫(xiě)格式比較容易記住,所以使用率是相當(dāng)高的。

今天在操作一段字符串時(shí),需要揪出字符串里的一個(gè)數(shù)字,雖然用split、substring、indexOf這幾個(gè)函數(shù)的結(jié)合使用能實(shí)現(xiàn),但是如果用下正則表達(dá)式,則效果好很多,正則表達(dá)式的最大作用不就是匹配嗎?于是嘗試使用正則表達(dá)式來(lái)編寫(xiě)程序。

var s = '我正在使用卡卡網(wǎng)www.howtostagehomes.com來(lái)測(cè)試網(wǎng)站速度';
var s = s.replace(/([\s\S]*)卡卡網(wǎng)([a-z.]*)([\s\S]*)/ig,'$2');
alert(s);

這樣的結(jié)果可以得到網(wǎng)址“www.howtostagehomes.com”。

但是當(dāng)上述語(yǔ)句的“卡卡網(wǎng)”是一個(gè)變量時(shí),replace()就出現(xiàn)了問(wèn)題。

我開(kāi)始這樣寫(xiě):

var s = '我正在使用卡卡網(wǎng)www.howtostagehomes.com來(lái)測(cè)試網(wǎng)站速度';
var words = '卡卡網(wǎng)';
var s = s.replace(/([\s\S]*)'+words+'([a-z.]*)([\s\S]*)/ig,'$2');
alert(s);

但是運(yùn)行結(jié)果是:我正在使用卡卡網(wǎng)www.howtostagehomes.com來(lái)測(cè)試網(wǎng)站速度。也就是沒(méi)有把網(wǎng)址給取出來(lái)。

然后又試了很多方法,都不頂用。

看來(lái)這里用replace()是行不通了,最后解決的方式變得比較復(fù)雜,寫(xiě)法如下:

var s = '我正在使用卡卡網(wǎng)www.howtostagehomes.com來(lái)測(cè)試網(wǎng)站速度';
var words = '卡卡網(wǎng)';
var regExp=new RegExp("([\s\S]*)"+words+"([a-z.]*)([\s\S]*)","gmi");
regExp.test(s);
var url = RegExp.$2;
alert(url);

運(yùn)行結(jié)果是:www.howtostagehomes.com

這里用到RegExp類,下面解釋下上述語(yǔ)句的含義。

var regExp=new RegExp(); //是定義一個(gè)正則表達(dá)式實(shí)例

[\s\S]* 可以匹配所有字符,包括換行符等不可見(jiàn)符號(hào)。

[a-z.]* 是匹配網(wǎng)址,當(dāng)然,這個(gè)寫(xiě)法只能匹配包含小寫(xiě)字符的網(wǎng)址,擴(kuò)充寫(xiě)法是[a-zA-Z0-9.~]*就可以包含大部分網(wǎng)址了。

gmi 是,g表示全局掃描,如果不加,那么只匹配第一個(gè)匹配到的。加了g選項(xiàng)后,每一次匹配后,就會(huì)往下匹配。當(dāng)掃描不到匹配的字符時(shí),則返回null。i表示不區(qū)分大小寫(xiě)。

regExp.test(s); //s是原字符串,用regExp的正則去匹配出想要的一段字符串。

RegExp.$2; //這個(gè)是取第2個(gè)匹配項(xiàng),每一個(gè)括號(hào)()是一個(gè)匹配項(xiàng)。

知識(shí)擴(kuò)充

js正則表達(dá)式基本語(yǔ)法及簡(jiǎn)單實(shí)例

1、 javascript 正則對(duì)象創(chuàng)建 和用法

聲明javascript 正則表達(dá)式

var reCat = new RegExp("cat");

你也可以 

var reCat = /cat/;      //Perl 風(fēng)格   (推薦)

2 、學(xué)習(xí)最常用的 test exec match search  replace  split 6個(gè)方法

1) test  檢查指定的字符串是否存在

var data = "123123";
var reCat = /123/gi;
alert(reCat.test(data));  //true

//檢查字符是否存在  g 繼續(xù)往下走  i 不區(qū)分大小寫(xiě)

2) exec 返回查詢值

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /cat/i;
alert(reCat.exec(data));  //Cat

 3)match  得到查詢數(shù)組

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /cat/gi;
var arrMactches = data.match(reCat)
for (var i=0;i < arrMactches.length ; i++)
{
    alert(arrMactches[i]);   //Cat  cat
}

4) search  返回搜索位置  類似于indexof

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /cat/gi;
alert(data.search(reCat));  //23

5) replace  替換字符  利用正則替換

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /cat/gi;
alert(data.replace(reCat,"libinqq"));

6)split   利用正則分割數(shù)組

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /\,/;
var arrdata = data.split(reCat);
for (var i = 0; i < arrdata.length; i++)
{
    alert(arrdata[i]);
}

3、學(xué)習(xí)下  簡(jiǎn)單類   負(fù)向類  范圍類  組合類

 //簡(jiǎn)單類

var data = "1libinqq,2libinqq,3libinqq,4libinqq";
var reCat = /[123]libinqq/gi;
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
{
    alert(arrdata[i]);  // 1libinqq 2libinqq  3libinqq
}

 //負(fù)向類

var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq";  //\u0062cf
var reCat = /[^a123]libinqq/gi;
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
{
    alert(arrdata[i]);  //4libinqq
}

//范圍類

var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5";  //\u0062cf
var reCat = /libinqq[2-3]/gi;
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
{
    alert(arrdata[i]);   // libinqq2  libinqq3
}

//組合類

var data = "a,b,c,w,1,2,3,5";  //\u0062cf
var reCat = /[a-q1-4\n]/gi;
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
{
    alert(arrdata[i]);  // a b c 1 2 3
}

您可能對(duì)以下文章也感興趣

asp.net正則表達(dá)式提取網(wǎng)頁(yè)網(wǎng)址、標(biāo)題、圖片實(shí)例以及過(guò)濾所有HTML標(biāo)簽實(shí)例

總結(jié):asp.net分割字符串的幾種方法

java中用正則表達(dá)式判斷字符串是否數(shù)字

標(biāo)簽: 正則表達(dá)式  replace  
相關(guān)文章
    x