JS的正則表達式

//校驗是否全由數字組成
[code] function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗登錄名:只能輸入5-20個以字母開頭、可帶數字、“_”、“.”的字串
[code] function isRegisterUserName(s) { var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗用戶姓名:只能輸入1-30個以字母開頭的字串
[code] function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true } }} //校驗密碼:只能輸入6-20個字母、數字、下劃線 [code] function isPasswd(s) { var patrn=/^(\w){6,20}$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗普通電話、傳真號碼:可以“+”開頭,除數字外,可含有“-”
[code] function isTel(s) { //var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/; var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗手機號碼:必須以數字開頭,除數字外,可含有“-”
[code] function isMobil(s) { var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗郵政編碼
[code] function isPostalCode(s) { //var patrn=/^[a-zA-Z0-9]{3,12}$/; var patrn=/^[a-zA-Z0-9 ]{3,12}$/; if (!patrn.exec(s)) return false return true } [/code]

//校驗搜索關鍵字
[code] function isSearch(s) { var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\] [\]\{\}:;'\,.<>?]{0,19}$/; if (!patrn.exec(s)) return false return true } function isIP(s) //by zergling { var patrn=/^[0-9.]{1,20}$/; if (!patrn.exec(s)) return false return true } [/code]

正則表達式
[code] "^\\d+$"  //非負整數(正整數 + 0) "^[0-9]*[1-9][0-9]*$"  //正整數 "^((-\\d+)|(0+))$"  //非正整數(負整數 + 0) "^-[0-9]*[1-9][0-9]*$"  //負整數 "^-?\\d+$"    //整數 "^\\d+(\\.\\d+)?$"  //非負浮點數(正浮點數 + 0) "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數 "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮點數(負浮點數 + 0) "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數 "^(-?\\d+)(\\.\\d+)?$"  //浮點數 "^[A-Za-z]+$"  //由26個英文字母組成的字符串 "^[A-Z]+$"  //由26個英文字母的大寫組成的字符串 "^[a-z]+$"  //由26個英文字母的小寫組成的字符串 "^[A-Za-z0-9]+$"  //由數字和26個英文字母組成的字符串 "^\\w+$"  //由數字、26個英文字母或者下劃線組成的字符串 "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址 "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url "^[A-Za-z0-9_]*$" [/code]

正則表達式使用詳解

簡介

簡單的說,正則表達式是一種可以用于模式匹配和替換的強有力的工具。其作用如下:
測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
替換文本。可以在文檔中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字。
根據模式匹配從字符串中提取一個子字符串。可以用來在文本或輸入字段中查找特定文字。

基本語法

在對正則表達式的功能和作用有了初步的了解之后,我們就來具體看一下正則表達式的語法格式。

正則表達式的形式一般如下:  

/love/  其中位于“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入“/”定界符之間即可。為了能夠使用戶更加靈活的定制模式內容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位于元字符前面的字符)在目標對象中的出現模式。
較為常用的元字符包括: “+”, “*”,以及 “?”。

“+”元字符規定其前導字符必須在目標對象中連續出現一次或多次。

“*”元字符規定其前導字符必須在目標對象中出現零次或連續多次。

“?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。

下面,就讓我們來看一下正則表達式元字符的具體應用。

/fo+/  因為上述正則表達式中包含“+”元字符,表示可以與目標對象中的 “fool”, “fo”, 或者 “football”等在字母f后面連續出現一個或多個字母o的字符串相匹配。

/eg*/  因為上述正則表達式中包含“*”元字符,表示可以與目標對象中的 “easy”, “ego”, 或者 “egg”等在字母e后面連續出現零個或多個字母g的字符串相匹配。

/Wil?/  因為上述正則表達式中包含“?”元字符,表示可以與目標對象中的 “Win”, 或者“Wilson”,等在字母i后面連續出現零個或一個字母l的字符串相匹配。

有時候不知道要匹配多少字符。為了能適應這種不確定性,正則表達式支持限定符的概念。這些限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。

{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。

{n,} n 是一個非負整數。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。

{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格。

除了元字符之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,/jim {2,6}/ 上述正則表達式規定字符m可以在匹配對象中連續出現2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。
在對如何使用正則表達式有了初步了解之后,我們來看一下其它幾個重要的元字符的使用方式。
[code] \s:用于匹配單個空格符,包括tab鍵和換行符; \S:用于匹配除單個空格符之外的所有字符; \d:用于匹配從0到9的數字; \w:用于匹配字母,數字或下劃線字符; \W:用于匹配所有與\w不匹配的字符; . :用于匹配除換行符之外的所有字符。 [/code]
(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)
下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。
/\s+/ 上述正則表達式可以用于匹配目標對象中的一個或多個空格字符。
/\d000/ 如果我們手中有一份復雜的財務報表,那么我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。
除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用于規定匹配模式在目標對象中的出現位置。 較為常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
[code] “^”定位符規定匹配模式必須出現在目標字符串的開頭 “$”定位符規定匹配模式必須出現在目標對象的結尾 “\b”定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一 “\B”定位符則規定匹配對象必須位于目標字符串的開頭和結尾兩個邊界之內, 即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結尾。 [/code]
同樣,我們也可以把“^”和“$”以及“\b”和“\B”看作是互為逆運算的兩組定位符。舉例來說: /^hell/ 因為上述正則表達式中包含“^”定位符,所以可以與目標對象中以 “hell”, “hello”或“hellhound”開頭的字符串相匹配。 /ar$/ 因為上述正則表達式中包含“$”定位符,所以可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。 /\bbom/ 因為上述正則表達式模式以“\b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。/man\b/ 因為上述正則表達式模式以“\b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。
為了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限于具體的字符。例如:
[code] /[A-Z]/  上述正則表達式將會與從A到Z范圍內任何一個大寫字母相匹配。 /[a-z]/  上述正則表達式將會與從a到z范圍內任何一個小寫字母相匹配。 /[0-9]/  上述正則表達式將會與從0到9范圍內任何一個數字相匹配。 /([a-z][A-Z][0-9])+/ 上述正則表達式將會與任何由字母和數字組成的字符串,如 “aB0” 等相匹配。 [/code]
這里需要提醒用戶注意的一點就是可以在正則表達式中使用 “()” 把字符串組合在一起。“()”符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如 “abc”等的字符串匹配,因為“abc”中的最后一個字符為字母而非數字。
如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如:/to|too|2/ 上述正則表達式將會與目標對象中的 “to”, “too”, 或 “2” 相匹配。
正則表達式中還有一個較為常用的運算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目標對象中不能存在模式中所規定的字符串。例如:/[^A-C]/ 上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位于“[]”之外,或沒有“[]”時,則應當被視做定位符。
最后,當用戶需要在正則表達式的模式中加入元字符,并查找其匹配對象時,可以使用轉義符“\”。例如:/Th\*/  上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。
在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先級順序來求值。優先級如下:
[code] 1.\ 轉義符 2.(), (?:), (?=), [] 圓括號和方括號 3.*, +, ?, {n}, {n,}, {n,m} 限定符 4.^, $, \anymetacharacter 位置和順序 5.|“或”操作 [/code]

使用實例
在JavaScript 1.2中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗目標對象中是否包含匹配模式,并相應的返回true或false。
我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。
[code] <html> <head>   <script language="Javascript1.2">      <!-- start hiding      function verifyAddress(obj)      {       var email = obj.email.value;       var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;       flag = pattern.test(email);       if(flag)       {        alert(“Your email address is correct!”);        return true;       }       else        {         alert(“Please try again!”);         return false;         }       }      // stop hiding -->     </script>   </head>   <body>    <form onSubmit="return verifyAddress(this);">     <input name="email" type="text">     <input type="submit">     </form>   </body> </html> [/code]

正則表達式對象
本對象包含正則表達式模式以及表明如何應用模式的標志。
[code] 語法 1 re = /pattern/[flags] 語法 2 re = new RegExp("pattern",["flags"]) [/code]
參數
re
必選項。將要賦值為正則表達式模式的變量名。

Pattern
必選項。要使用的正則表達式模式。如果使用語法 1,用 "/" 字符分隔模式。如果用語法 2,用引號將模式引起來。

Flags
可選項。如果使用語法 2 要用引號將 flag 引起來。標志可以組合使用,可用的有:
[code] g (全文查找出現的所有 pattern) i (忽略大小寫) m (多行查找) [/code]

示例
下面的示例創建一個包含正則表達式模式及相關標志的對象(re),向您演示正則表達式對象的用法。在本例中,作為結果的正則表達式對象又用于 match 方法中:
[code] function MatchDemo() { var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = new RegExp("ain","g"); // 創建正則表達式對象。 r = s.match(re); // 在字符串 s 中查找匹配。 return(r); } [/code]

返回值: ain,ain,ain,ain\\
屬性 lastIndex 屬性 | source 屬性\\
方法 compile 方法 | exec 方法 | test 方法\\
要求 版本 3\\
請參閱 RegExp 對象 | 正則表達式語法 | String 對象\\

exec 方法
用正則表達式模式在字符串中運行查找,并返回包含該查找結果的一個數組。
rgExp.exec(str)

參數

rgExp
必選項。包含正則表達式模式和可用標志的正則表達式對象。

str
必選項。要在其中執行查找的 String 對象或字符串文字。

說明\\
如果 exec 方法沒有找到匹配,則它返回 null。如果它找到匹配,則 exec 方法返回一個數組,并且更新全局 RegExp 對象的屬性,以反映匹配結果。數組的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出現的任意一個子匹配。這相當于沒有設置全局標志 (g) 的 match 方法。
如果為正則表達式設置了全局標志,exec 從以 lastIndex 的值指示的位置開始查找。如果沒有設置全局標志,exec 忽略 lastIndex 的值,從字符串的起始位置開始搜索。

exec 方法返回的數組有三個屬性,分別是 input、index 和 lastIndex。Input 屬性包含了整個被查找的字符串。Index 屬性中包含了整個被查找字符串中被匹配的子字符串的位置。LastIndex 屬性中包含了匹配中最后一個字符的下一個位置。

示例\\
下面的例子舉例說明了 exec 方法的用法:
[code] function RegExpTest() { var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()) if (ver >= 5.5){ // 測試 JScript 的版本。 var src = "The rain in Spain falls mainly in the plain."; var re = /\w+/g; // 創建正則表達式模式。 var arr; while ((arr = re.exec(src)) != null) document.write(arr.index + "-" + arr.lastIndex + arr + "\t"); } else{ alert("請使用 JScript 的更新版本"); } } [/code]

返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain

test 方法\\
返回一個 Boolean 值,它指出在被查找的字符串中是否存在模式。
rgexp.test(str)

參數\\
rgexp
必選項。包含正則表達式模式或可用標志的正則表達式對象。

str
必選項。要在其上測試查找的字符串。

說明
test 方法檢查在字符串中是否存在一個模式,如果存在則返回 true,否則就返回 false。
全局 RegExp 對象的屬性不由 test 方法來修改。

示例
下面的例子舉例說明了 test 方法的用法:
[code] function TestDemo(re, s) { var s1; // 聲明變量。 // 檢查字符串是否存在正則表達式。 if (re.test(s)) // 測試是否存在。 s1 = " contains "; // s 包含模式。 else s1 = " does not contain "; // s 不包含模式。 return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。 } [/code]

函數調用:document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));

返回值:'The rain in Spain falls mainly in the plain.' contains 'ain+'

match 方法
使用正則表達式模式對字符串執行查找,并將包含查找的結果作為數組返回。\\
stringObj.match(rgExp)

參數\\
stringObj
必選項。對其進行查找的 String 對象或字符串文字。

rgExp
必選項。為包含正則表達式模式和可用標志的正則表達式對象。也可以是包含正則表達式模式和可用標志的變量名或字符串文字。

說明\\
如果 match 方法沒有找到匹配,返回 null。如果找到匹配返回一個數組并且更新全局 RegExp 對象的屬性以反映匹配結果。
match 方法返回的數組有三個屬性:input、index 和 lastIndex。Input 屬性包含整個的被查找字符串。Index 屬性包含了在整個被查找字符串中匹配的子字符串的位置。LastIndex 屬性包含了最后一次匹配中最后一個字符的下一個位置。
如果沒有設置全局標志 (g),數組的 0 元素包含整個匹配,而第 1 到 n 元素包含了匹配中曾出現過的任一個子匹配。這相當于沒有設置全局標志的 exec 方法。如果設置了全局標志,元素 0 到 n 中包含所有匹配。

示例\\
下面的示例演示了match 方法的用法:
[code] function MatchDemo() { var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = /ain/i; // 創建正則表達式模式。 r = s.match(re); // 嘗試匹配搜索字符串。 return(r); // 返回第一次出現 "ain" 的地方。 } [/code]
返回值:ain

本示例說明帶 g 標志設置的 match 方法的用法。
[code] function MatchDemo() { var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain"; re = /ain/ig; // 創建正則表達式模式。 r = s.match(re); // 嘗試去匹配搜索字符串。 return(r); // 返回的數組包含了所有 "ain" // 出現的四個匹配。 } [/code]
返回值:ain,ain,ain,ain

上面幾行代碼演示了字符串文字的 match 方法的用法。
[code] var r, re = "Spain"; r = "The rain in Spain".replace(re, "Canada"); return r; [/code]
返回值:The rain in Canada

search 方法
返回與正則表達式查找內容匹配的第一個子字符串的位置。

stringObj.search(rgExp)

參數\\
stringObj
必選項。要在其上進行查找的 String 對象或字符串文字。

rgExp
必選項。包含正則表達式模式和可用標志的正則表達式對象。

說明

search 方法指明是否存在相應的匹配。如果找到一個匹配,search 方法將返回一個整數值,指明這個匹配距離字符串開始的偏移位置。如果沒有找到匹配,則返回 -1。

示例\\
下面的示例演示了 search 方法的用法。
[code] function SearchDemo() { var r, re; // 聲明變量。 var s = "The rain in Spain falls mainly in the plain."; re = /falls/i; // 創建正則表達式模式。 r = s.search(re); // 查找字符串。 return(r); // 返回 Boolean 結果。 } [/code]
返回值:18

Replace方法

返回根據正則表達式進行文字替換后的字符串的復制。
stringObj.replace(rgExp, replaceText)

參數

stringObj
必選項。要執行該替換的 String 對象或字符串文字。該字符串不會被 replace 方法修改。
rgExp
必選項。為包含正則表達式模式或可用標志的正則表達式對象。也可以是 String 對象或文字。
如果 rgExp 不是正則表達式對象,它將被轉換為字符串,并進行精確的查找;
不要嘗試將字符串轉化為正則表達式。
replaceText
必選項。是一個String 對象或字符串文字,對于stringObj 中每個匹配 rgExp 中的位置都用
該對象所包含的文字加以替換。在 Jscript 5.5 或更新版本中,replaceText 參數也可以
是返回替換文本的函數。

說明

?

replace 方法的結果是一個完成了指定替換的 stringObj 對象的復制。

下面任意的匹配變量都能用來識別最新的匹配以及找出匹配的字符串。在需要動態決定替換字符串

的文本替換中可以使用匹配變量。

?

字符含義
$$$ (JScript 5.5 或更新版本)
$&指定與整個模式匹配的 stringObj 的部分。(JScript 5.5 或更新版本)
$`指定由 $& 描述的匹配之前的 stringObj 部分。(JScript 5.5 或更新版本)
$'指定由 $& 描述的匹配之后的 stringObj 部分。(JScript 5.5 或更新版本)
$n捕獲的第 n 個子匹配,此處 n 為從1到9的十進制一位數。(JScript 5.5 或更新版本)
$nn捕獲的第 nn 個子匹配,此處 nn 為從01到99的十進制兩位數。(JScript 5.5 或更新版本)

?

如果 replaceText 為函數,對于每一個匹配的子字符串,調用該函數時帶有下面的 m+3 個

參數,此處 m 是在 rgExp 中捕獲的左括弧的個數。第一個參數是匹配的子字符串。

接下來的 m 個參數是查找中捕獲的全部結果。第 m+2 個參數是在 stringObj 中匹配出現的偏移量,

而第 m+3 個參數為 stringObj。結果為將每一匹配的子字符串替換為函數調用的相應返回值的

字符串值。

?

replace() 方法的參數 replacement 可以是函數而不是字符串。在這種情況下,

每個匹配都調用該函數,它返回的字符串將作為替換文本使用。該函數的第一個參數是匹配模式

的字符串。接下來的參數是與模式中的子表達式匹配的字符串,可以有 0 個或多個這樣的

參數。接下來的參數是一個整數,聲明了匹配在 stringObject 中出現的位置。

最后一個參數是 stringObject 本身。

?

更有效的字符串替換:

<script language="javascript">
function replace(str,a,b)
??? {
???? var i;
???? var s2 = str;
???? while(s2.indexOf(a)>0)
???? {
???? i = s2.indexOf(a);
???? s2 = s2.substring(0, i) + b
???? + s2.substring(i + 2, s2.length);
???? }
???? return s2;
??? }
</script>

發現一個我認為比原來的方法更有效率的字符串替換方法。
首先看看原來是怎么樣做的:
程序代碼
function toTXT(str){
???? str = str.replace(/\&/g, "& amp;");
???? str = str.replace(/\>/g, "& gt;");
???? str = str.replace(/\</g, "& lt;");
???? str = str.replace(/\"/g, "& quot;");
???? str = str.replace(/\'/g, "& #39;");
???? return str;
}
分析:上面的方法是用來替換過濾字符串的HTML代碼的,一直認為這樣做很沒效率,

因為要把這個字符串進行5次全文匹配(不是數據庫中的全文檢索),有沒方法只使

用一次全文匹配,就可以替換掉不同的字符串為不同的結果呢?
呵呵,終于找到了下面的這個方法:
程序代碼
function toTXT(str){
???? var RexStr = /\<|\>|\"|\'|\&/g
???? str = str.replace(RexStr,
???????? function(MatchStr){
???????????? switch(MatchStr){
???????????????? case "<":
???????????????????? return "& lt;";
???????????????????? break;
???????????????? case ">":
???????????????????? return "& gt;";
???????????????????? break;
???????????????? case "\"":
???????????????????? return "& quot;";
???????????????????? break;
???????????????? case "'":
???????????????????? return "& #39;";
???????????????????? break;
???????????????? case "&":
???????????????????? return "& amp;";
???????????????????? break;
???????????????? default :
???????????????????? break;
???????????? }
???????? }
???? )
???? return str;
}

看上去要比第一個方法要復雜一些,寫的代碼也要多一點點,不過呢,只用一次,

就可以替換整個字符串里面的匹配字符為不同的結果,非常有效率的。而且代碼看

上去也很直觀,修改方便。


更重要的是第一個方法假如要替換"&"一定要放在最前面,而后面的方面完全不用擔心這個問題。
JavaScript還有很多鮮為人知的用法,而且很多思想在別的語言里面都沒有。

就算JAVA再怎么強大,他的正則表達式卻在JDK1.4里面才引入,落后了很多。

不過我沒說JAVA就一定比JS差只類的話啊。


JS的應用范圍絕對不止HTML,還有很多其他的方面都在使用他,

比如WebFT(測試網站的工具),.NET等,并且在即將發布,傳說中“FLASH殺手”

——WPF/E(Windows Presentation Foundation/Everywhere)出現后,

JS的應用范圍更加寬廣。


很多人都不屑于JS,認為他很低級,連基本的對象類型都沒有。NO,錯了,在.NET里面,

也就是Jscript.Net中,微軟將JS的版本提升為8.0,基本上他已經與C#沒有任何差別,

所有程序語言該有的他都具備了。


說一個笑話,我寫.net和ASP就用的Jscript,但是VB和C#我也并不是屬于那種泛泛而談

的類型,只是我覺得假如可以用一門語言從后寫到前,包括他的周邊項目,那將是一件

非常愜意的事情。從此再也不會在多種語言中轉來轉去了。

?

?

Replace 方法更新全局 RegExp 對象的屬性。

示例

下面的示例演示了 replace 方法將第一次出現的單詞 "The" 替換為單詞 "A" 的用法。

function ReplaceDemo(){
   var r, re;                    // 聲明變量。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = /The/g;             // 創建正則表達式模式。
   r = ss.replace(re, "A");    // 用 "A" 替換 "The"。
   return(r);                   // 返回替換后的字符串。
}

另外, replace 方法也可以替換模式中的子表達式。下面的范例演示了交換字符串中的每一對單詞:

function ReplaceDemo(){
   var r, re;                      // 聲明變量。
   var ss = "The rain in Spain falls mainly in the plain.";
   re = /(\S+)(\s+)(\S+)/g;        // 創建正則表達式模式。
   r = ss.replace(re, "$3$2$1");   // 交換每一對單詞。
   return(r);                      // 返回結果字符串。
}

下面的示例(在 JScript 5.5 及更新版本中執行)執行的是從華氏到攝氏的轉換,它演示了使用

函數作為 replaceText。要想知道該函數是如何工作的,傳遞一個包含數值的字符串,數值后要

緊跟 "F" (例如 "Water boils at 212")。

?

function f2c(s) {
  var test = /(\d+(\.\d*)?)F\b/g;    // 初始化模式。
  return(s.replace
    (test,
      function($0,$1,$2) { 
        return((($1-32) * 5/9) + "C");
      }
    )
  );
}
document.write(f2c("Water freezes at 32F and boils at 212F."));
function($0,$1,$2) { return((($1-32) * 5/9) + "C"); } ) ); } document.write(f2c("Water freezes at 32F and boils at 212F."));
?
自己寫的兩個方法:
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function replaceAll(str,b){
//var renStr=str.replace("-","*");這樣寫只能替換第一個匹配的字符.
var renStr=str.replace(/\-/g,b);//這樣寫可以替換匹配的字符所有字符.
與replaceAllNew()方法作用是一樣的.

document.all.text4.value=renStr;
document.all.text2.value="";
document.all.text3.value="";
}
function replaceAllNew(text,replacement,target){
if(text==null || text=="") return text;//如果text無內容,返回text
if(replacement==null || replacement=="") return text;//如果replacement無內容,返回text
if(target==null) target="";//如果target無內容,設置為空串
var returnString="";//定義返回值變量,并初始化
var index=text.indexOf(replacement);//定義查找replacement的索引下標,并進行第一次查找
while(index!=-1)
{//直至未找到replacement,要么進行下面的處理
//alert(index);
//alert(returnString);
returnString+=text.substring(0,index)+target;//如果找到的replacement前有字符,
累加到返回值中,并加上target
text=text.substring(index+replacement.length);//取掉找到的replacement及前邊的字符
index=text.indexOf(replacement);//進行查詢,準備下一次處理
}
if(text!="") returnString+=text;//如果找到的最后一個replacement后有字符,累加到返回值中
//alert(returnString);
document.all.text4.value=returnString;
document.all.text2.value="";
document.all.text3.value="";
return returnString;//返回
}
function bodyOnload(){
var str1="adbddasd";
//replaceAll(str1,'a','A');
}
//-->
</SCRIPT>
<body >
1:javascript 中的replace方法測試!<br>
原來的:<input type="text" value="">;轉換后的:<input type="text" value=""><br>
把字符:<input type="text" value=""><br>
替換為:<input type="text" value=""><br>
<input type="button" value="replace1" />
<input type="button" value="replace2" />
</body>
</html>

文章來源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!393.entry
發表于 2008-03-19 19:57 X-Spirit 閱讀(241) 評論(0)  編輯  收藏