內容來源:JavaScript RegExp 對象參考手冊 http://www.w3school.com.cn/js/jsref_obj_regexp.asp
RegExp 對象
RegExp 對象屬性
RegExp 對象方法
支援Regex的 String 對象的方法
RegExp 對象
RegExp 對象表示Regex,它是對字串執行模式比對的強大工具。
直接量文法: /pattern/attributes
建立 RegExp 對象的文法:new RegExp(pattern, attributes);
參數
參數 pattern 是一個字串,指定了Regex的模式或其他Regex。
參數 attributes 是一個可選的字串,包含屬性 "g"、"i" 和 "m",分別用於指定全域匹配、區分大小寫匹配和多行匹配。ECMAScript 標準化之前,不支援 m 屬性。如果 pattern 是Regex,而不是字串,則必須省略該參數。
傳回值
一個新的 RegExp 對象,具有指定的模式和標誌。如果參數 pattern 是Regex而不是字串,那麼 RegExp() 建構函式將用與指定的 RegExp 相同的模式和標誌建立一個新的 RegExp 對象。
如果不用 new 運算子,而將 RegExp() 作為函數調用,那麼它的行為與用 new 運算子調用時一樣,只是當 pattern 是Regex時,它只返回 pattern,而不再建立一個新的 RegExp 對象。
拋出
SyntaxError - 如果 pattern 不是合法的Regex,或 attributes 含有 "g"、"i" 和 "m" 之外的字元,拋出該異常。
TypeError - 如果 pattern 是 RegExp 對象,但沒有省略 attributes 參數,拋出該異常。
RegExp 對象屬性
global RegExp 對象是否具有標誌 g。
ignoreCase RegExp 對象是否具有標誌 i。
lastIndex 一個整數,標示開始下一次匹配的字元位置。
multiline RegExp 對象是否具有標誌 m。
source Regex的源文本。
RegExp 對象方法
compile 編譯Regex,也可用於改變和重新編譯Regex。
exec 檢索字串中指定的值。返回找到的值,並確定其位置。
exec() 方法的功能非常強大,它是一個通用的方法,而且使用起來也比 test() 方法以及支援Regex的 String 對象的方法更為複雜。
1、在迴圈中反覆地調用 exec() 方法是唯一一種獲得全域模式的完整模式比對資訊的方法。
<script type="text/javascript">var str = "Visit W3School"; var patt = new RegExp("W3School","g");var result;while ((result = patt.exec(str)) != null) { document.write(result); document.write("<br />"); document.write(result.lastIndex); }</script>/*輸出:W3School14*/
2、如果 exec() 找到了匹配的文本,則返回一個結果數組。否則,返回 null。
此數組的第 0 個元素是與Regex相匹配的文本,第 1 個元素是與 RegExpObject 的第 1 個子運算式(圓括弧引用Regex的某部分)相匹配的文本(如果有的話),第 2 個元素是與 RegExpObject 的第 2 個子運算式相匹配的文本(如果有的話),以此類推。
除了數組元素和 length 屬性之外,exec() 方法還返回兩個屬性。index 屬性聲明的是匹配文本的第一個字元的位置。input 屬性則存放的是被檢索的字串 string。
var re = /(ds)+(j+s)/ig;var str = "cfdsJS *(&dsjjjsYJSjs 888dsdsJS";var resultArray = re.exec(str);while (resultArray) { document.writeln(resultArray[0]); document.writeln("next match starts at " + re.lastIndex + "<br />"); for (var i=1; i<resultArray.length; i++) { document.writeln("substring of " + resultArray[i] + "<br />"); } document.writeln("<br />") resultArray = re.exec(str);}/*輸出:dsJS next match starts at 6substring of dssubstring of JSdsjjjs next match starts at 16substring of dssubstring of jjjsdsdsJS next match starts at 31substring of dssubstring of JS*/
test 檢索字串中指定的值。如果含有指定的值返回 true ,否則返回 false。
調用 RegExp 對象 r 的 test() 方法,並為它傳遞字串 s,與這個表示式是等價的:(r.exec(s) != null)。
<script type="text/javascript">var str = "Visit W3School";var patt1 = new RegExp("W3School");var result = patt1.test(str);document.write("Result: " + result);</script>/*輸出:Result: true*/
支援Regex的 String 對象的方法
search 檢索與Regex相匹配的值。
如果沒有找到任何匹配的子串,則返回 -1。
要執行忽略大小寫檢索,請追加標誌 i。
search() 方法不執行全域匹配,它將忽略標誌 g。它同時忽略 regexp 的 lastIndex 屬性,並且總是從字串的開始進行檢索,這意味著它總是返回 stringObject 的第一個匹配的位置。
<script type="text/javascript">var str="Visit W3School!"document.write(str.search(/w3school/i))</script>/*輸出:6*/
match 找到一個或多個Regex的匹配。
該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字串的位置。
全域模式下建議使用 RegExp.exec() 代替本方法。
replace 替換與Regex匹配的子串。
stringObject.replace(regexp/substr,replacement)
字串 stringObject 的 replace() 方法執行的是尋找並替換的操作。它將在 stringObject 中尋找與 regexp 相匹配的子字串,然後用 replacement 來替換這些子串。如果 regexp 具有全域標誌 g,那麼 replace() 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。
replacement 可以是字串,也可以是函數。如果它是字串,那麼每個匹配都將由字串替換。但是 replacement 中的 $ 字元具有特定的含義。如下表所示,它說明從模式比對得到的字串將用於替換。
字元 替換文本
$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子運算式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位於匹配子串左側的文本。
$' 位於匹配子串右側的文本。
$$ 直接量符號。
注意:ECMAScript v3 規定,replace() 方法的參數 replacement 可以是函數而不是字串。在這種情況下,每個匹配都調用該函數,它返回的字串將作為替換文本使用。該函數的第一個參數是匹配模式的字串。接下來的參數是與模式中的子運算式匹配的字串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了匹配在 stringObject 中出現的位置。最後一個參數是 stringObject 本身。
// 1、執行一次全域替換,每當 "Microsoft" 被找到,它就被替換為 "W3School":<script type="text/javascript">var str="Welcome to Microsoft! "str=str + "We are proud to announce that Microsoft has "str=str + "one of the largest Web Developers sites in the world."document.write(str.replace(/Microsoft/g, "W3School"))</script>/*輸出:Welcome to W3School! We are proud to announce that W3Schoolhas one of the largest Web Developers sites in the world.例子 3*///2、確保匹配字串大寫字元的正確:text = "javascript Tutorial";text.replace(/javascript/i, "JavaScript");//3、將把 "Doe, John" 轉換為 "John Doe" 的形式:name = "Doe, John";name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");//4、把所有的花引號替換為直引號:name = '"a", "b"';name.replace(/"([^"]*)"/g, "'$1'");//5、把字串中所有單詞的首字母都轉換為大寫:name = 'aaa bbb ccc';uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );
split 把字串分割為字串數組。
stringObject.split(separator,howmany)
howmany:可選。該參數可指定返回的數組的最大長度。如果設定了該參數,返回的子串不會多於這個參數指定的數組。
注釋:如果把Null 字元串 ("") 用作 separator,那麼 stringObject 中的每個字元之間都會被分割。
注釋:String.split() 執行的操作與 Array.join 執行的操作是相反的。
推薦文章:
MSDN JScript 8.0 Regex介紹 http://msdn.microsoft.com/zh-cn/library/28hw3sce