任丘 做網(wǎng)站免費網(wǎng)站流量統(tǒng)計
Javascript之RegExp 對象
?
RegExp 對象
RegExp 對象表示正則表達式,它是對字符串執(zhí)行模式匹配的強大工具。
直接量語法
/pattern/attributes
創(chuàng)建 RegExp 對象的語法:
new RegExp(pattern, attributes);
參數(shù)
參數(shù) pattern 是一個字符串,指定了正則表達式的模式或其他正則表達式。
參數(shù) attributes 是一個可選的字符串,包含屬性 "g"、"i"和"m",分別用于指定全局匹配、區(qū)分大小寫的匹配和多行匹配。ECMAScript 標準化之前,不支持 m 屬性。如果pattern 是正則表達式,而不是字符串,則必須省略該參數(shù)。
返回值
一個新的 RegExp 對象,具有指定的模式和標志。如果參數(shù) pattern 是正則表達式而不是字符串,那么 RegExp() 構(gòu)造函數(shù)將用與指定的RegExp 相同的模式和標志創(chuàng)建一個新的 RegExp 對象。
如果不用 new 運算符,而將 RegExp() 作為函數(shù)調(diào)用,那么它的行為與用 new 運算符調(diào)用時一樣,只是當 pattern 是正則表達式時,它只返回pattern,而不再創(chuàng)建一個新的RegExp 對象。
拋出
SyntaxError - 如果 pattern 不是合法的正則表達式,或 attributes 含有 "g"、"i" 和"m" 之外的字符,拋出該異常。
TypeError - 如果 pattern 是 RegExp 對象,但沒有省略 attributes 參數(shù),拋出該異常。
修飾符
修飾符 | 描述 |
i | 執(zhí)行對大小寫不敏感的匹配。 |
g | 執(zhí)行全局匹配(查找所有匹配而非在找到第一個匹配后停止)。 |
m | 執(zhí)行多行匹配。 |
方括號
方括號用于查找某個范圍內(nèi)的字符:
表達式 | 描述 |
[abc] | 查找方括號之間的任何字符。 |
[^abc] | 查找任何不在方括號之間的字符。 |
[0-9] | 查找任何從 0 至 9 的數(shù)字。 |
[a-z] | 查找任何從小寫 a 到小寫 z 的字符。 |
[A-Z] | 查找任何從大寫 A 到大寫 Z 的字符。 |
[A-z] | 查找任何從大寫 A 到小寫 z 的字符。 |
[adgk] | 查找給定集合內(nèi)的任何字符。 |
[^adgk] | 查找給定集合外的任何字符。 |
(red|blue|green) | 查找任何指定的選項。 |
元字符
元字符(Metacharacter)是擁有特殊含義的字符:
元字符 | 描述 |
. | 查找單個字符,除了換行和行結(jié)束符。 |
\w | 查找單詞字符。 |
\W | 查找非單詞字符。 |
\d | 查找數(shù)字。 |
\D | 查找非數(shù)字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 查找位于單詞的開頭或結(jié)尾的匹配。 |
\B | 查找不處在單詞的開頭或結(jié)尾的匹配。 |
\0 | 查找 NUL 字符。 |
\n | 查找換行符。 |
\f | 查找換頁符。 |
\r | 查找回車符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八進制數(shù) xxx 規(guī)定的字符。 |
\xdd | 查找以十六進制數(shù) dd 規(guī)定的字符。 |
\uxxxx | 查找以十六進制數(shù) xxxx 規(guī)定的 Unicode 字符。 |
量詞
量詞 | 描述 |
n+ | 匹配任何包含至少一個 n 的字符串。 |
n* | 匹配任何包含零個或多個 n 的字符串。 |
n? | 匹配任何包含零個或一個 n 的字符串。 |
n{X} | 匹配包含 X 個 n 的序列的字符串。 |
n{X,Y} | 匹配包含 X 或 Y 個 n 的序列的字符串。 |
n{X,} | 匹配包含至少 X 個 n 的序列的字符串。 |
n$ | 匹配任何結(jié)尾為 n 的字符串。 |
^n | 匹配任何開頭為 n 的字符串。 |
?=n | 匹配任何其后緊接指定字符串 n 的字符串。 |
?!n | 匹配任何其后沒有緊接指定字符串 n 的字符串。 |
RegExp 對象屬性
FF: Firefox, IE: Internet Explorer
屬性 | 描述 | FF | IE |
global | RegExp 對象是否具有標志 g。 | 1 | 4 |
ignoreCase | RegExp 對象是否具有標志 i。 | 1 | 4 |
lastIndex | 一個整數(shù),標示開始下一次匹配的字符位置。 | 1 | 4 |
multiline | RegExp 對象是否具有標志 m。 | 1 | 4 |
source | 正則表達式的源文本。 | 1 | 4 |
RegExp 對象方法
FF: Firefox, IE: Internet Explorer
方法 | 描述 | FF | IE |
compile | 編譯正則表達式。 | 1 | 4 |
exec | 檢索字符串中指定的值。返回找到的值,并確定其位置。 | 1 | 4 |
test | 檢索字符串中指定的值。返回 true 或 false。 | 1 | 4 |
支持正則表達式的 String 對象的方法
FF: Firefox, IE: Internet Explorer
方法 | 描述 | FF | IE |
search | 檢索與正則表達式相匹配的值。 | 1 | 4 |
match | 找到一個或多個正則表達式的匹配。 | 1 | 4 |
replace | 替換與正則表達式匹配的子串。 | 1 | 4 |
split | 把字符串分割為字符串數(shù)組。 | 1 | 4 |
?
1.? RegExp 對象3 個方法:test()、exec() 以及 compile()。
1.1 test()我只用過這個,呵呵~~
test() 方法檢索字符串中的指定值。返回值是 true 或false。
例:
<scripttype="text/javascript">
var patt1=newRegExp("e");
document.write(patt1.test("Thebest things in life are free"));
</script>
輸出:true
1.2exec()
exec() 方法檢索字符串中的指定值。返回值是被找到的值。如果沒有發(fā)現(xiàn)匹配,則返回null。
例:
<scripttype="text/javascript">
var patt1=newRegExp("e");
document.write(patt1.exec("Thebest things in life are free"));
</script>
輸出:e
???????? 1.3 compile()
compile() 方法用于改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個參數(shù)。
例:
<scripttype="text/javascript">
var patt1=newRegExp("e");
document.write(patt1.test("Thebest things in life are free"));
patt1.compile("d");
document.write(patt1.test("Thebest things in life are free"));
</script>
???????? ?? 輸出:truefalse
2.??????修飾符i的定義和用法:用于執(zhí)行對大小寫不敏感的匹配。
?
語法
?new RegExp("regexp","i")
直接量語法:
?/regexp/i
瀏覽器支持:所有主流瀏覽器都支持 i 修飾符。
例:
<scripttype="text/javascript">
var str = "VisitW3School";
var patt1 = /w3school/i;
document.write(str.match(patt1));//注意這里的match方法是
</script>
??輸出:W3School
3.? 修飾符g定義和用法:用于執(zhí)行全局匹配(查找所有匹配而非在找到第一個匹配后停止)。
語法
newRegExp("regexp","g")
直接量語法:
?/regexp/g
瀏覽器支持:所有主流瀏覽器都支持 g 修飾符。
例1:對 "is" 進行全局搜索,輸出is,is
<scripttype="text/javascript">
var str="Is this all thereis?";
var patt1=/is/g;
document.write(str.match(patt1));
</script>
例2:對 "is" 進行全局且大小寫不敏感的搜索:
<scripttype="text/javascript">
var str="Is this all thereis?";
var patt1=/is/gi;
document.write(str.match(patt1));
</script>
4.? [abc] 表達式定義和用法:用于查找方括號之間的任何字符。
方括號內(nèi)的字符可以是任何字符或字符范圍。
語法
new RegExp("[abc]")
直接量語法:
?/[abc]/
瀏覽器支持:所有主流瀏覽器都支持 [abc] 表達式。
例:在字符串中對字符范圍 [a-h] 進行全局搜索,下面例子輸出h,a,h,e,e
<scripttype="text/javascript">
var str="Is this all thereis?";
var patt1=/[a-h]/g;
document.write(str.match(patt1));
</script>
?
5.? [abc] 表達式定義和用法:用于查找任何不在方括號之間的字符。
方括號內(nèi)的字符可以是任何字符或字符范圍。
語法
?new RegExp("[^xyz]")
直接量語法:
?/[^xyz]/
瀏覽器支持:所有主流瀏覽器都支持 [^abc] 表達式。
例:對不在字符范圍 [a-h] 內(nèi)的字符進行全局搜索,輸出結(jié)果:
I,s, ,t,i,s, ,l,l,,t,r, ,i,s,??
<scripttype="text/javascript">
var str="Is this all thereis?";
var patt1=/[^a-h]/g;
document.write(str.match(patt1));
</script>
6.? . 元字符定義和用法:用于查找單個字符,除了換行和行結(jié)束符。
語法
new RegExp("regexp.")
直接量語法:
?/regexp./
瀏覽器支持:所有主流瀏覽器都支持 . 元字符。
例:hat,hot
<scripttype="text/javascript">
var str="That's hot!";
var patt1=/h.t/g;
document.write(str.match(patt1));
</script>
7.? \w 元字符定義和用法:用于查找單詞字符。
語法
?new RegExp("\w")
直接量語法:
?/\w/
瀏覽器支持
所有主流瀏覽器都支持 \w 元字符。
例:對字符串中的單詞字符進行全局搜索,輸出:G,i,v,e,1,0,0
<scripttype="text/javascript">
var str="Give 100%!";
var patt1=/\w/g;
document.write(str.match(patt1));
</script><scripttype="text/javascript">
var str="Give 100%!";
var patt1=/\w/g;
document.write(str.match(patt1));
</script>
8.? \b 元字符定義和用法:用于查找位于單詞的開頭或結(jié)尾的匹配。
如果未找到匹配,則返回 null。
語法
?new RegExp("\bregexp")
直接量語法:
?/\bregexp/
瀏覽器支持
所有主流瀏覽器都支持 \b 元字符。
例: 對字符串中的單詞的開頭或結(jié)尾進行 "W3" 的全局搜索,輸出:W3
<scripttype="text/javascript">
var str="VisitW3School";
var patt1=/\bW3/g;
document.write(str.match(patt1));
</script>
9.? n+ 量詞定義和用法:匹配包含至少一個 n 的任何字符串。
語法
?new RegExp("n+")
直接量語法:
?/n+/
瀏覽器支持
所有主流瀏覽器都支持 + 量詞。
例1:對至少一個 "o" 進行全局搜索,輸出ooo,o,o,oo
<scripttype="text/javascript">
var str="Hellooo World!Hello W3School!";
var patt1=/o+/g;
document.write(str.match(patt1));
</script>
例2:對至少一個單詞字符進行全局搜索,輸出:Hellooo,World,Hello,W3School
<script type="text/javascript">
var str="Hellooo World!Hello W3School!";
var patt1=/\w+/g;
document.write(str.match(patt1));
</script>
10. n{X,} 量詞定義和用法:匹配包含 X 個 n 的序列的字符串。
X 必須是數(shù)字。
語法
new RegExp("n{X}")
直接量語法:
?/n{X}/
瀏覽器支持
所有主流瀏覽器都支持 {X} 量詞。
例: 對包含四位數(shù)字序列的子串進行全局搜索,輸出1000,1000
<scripttype="text/javascript">
var str="100, 1000 or10000?";
var patt1=/\d{4}/g;
document.write(str.match(patt1));
</script>
11.n$ 量詞定義和用法:匹配任何結(jié)尾為 n 的字符串。
語法
newRegExp("n$")
直接量語法:
?/n$/
瀏覽器支持
所有主流瀏覽器都支持 $ 量詞。
例:對字符串結(jié)尾的"is" 進行全局搜索,輸出is
<scripttype="text/javascript">
var str="Is this his";
var patt1=/is$/g;
document.write(str.match(patt1));
</script>
12. n^ 量詞定義和用法:匹配任何開頭為 n 的字符串。
語法
new RegExp("^n")
直接量語法:
/^n/
瀏覽器支持
所有主流瀏覽器都支持 ^ 量詞。
例:對字符串開頭的 "is" 進行全局搜索,輸出Is
<script type="text/javascript">
var str="Is this his";
var patt1=/^Is/g;
document.write(str.match(patt1));
</script>
13. ?=n 量詞定義和用法:匹配任何其后緊接指定字符串 n 的字符串。
語法
newRegExp("regexp(?=n)")
直接量語法:
?/regexp(?=n)/
瀏覽器支持:所有主流瀏覽器都支持 ?= 量詞。
例:對其后緊跟 "all" 的"is" 進行全局搜索:
<script type="text/javascript">
var str="Is this all thereis";
var patt1=/is(?= all)/;
document.write(str.match(patt1));
</script>
14. compile() 方法定義和用法:用于在腳本執(zhí)行過程中編譯正則表達式。
??? compile()方法也可用于改變和重新編譯正則表達式。
語法
RegExpObject.compile(regexp,modifier)
參數(shù)??????? 描述
Regexp:正則表達式。
Modifier:規(guī)定匹配的類型。"g" 用于全局匹配,"i"用于區(qū)分大小寫,"gi" 用于全局區(qū)分大小寫的匹配。
例:在字符串中全局搜索"man",并用 "person" 替換。然后通過 compile() 方法,改變正則表達式,用"person" 替換 "man" 或 "woman",:
<scripttype="text/javascript">
var str="Every man in theworld! Every woman on earth!";
patt=/man/g;
str2=str.replace(patt,"person");
document.write(str2+"<br/>");
patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"person");
document.write(str2);
</script>
輸出:
Every person in the world! Everywoperson on earth!
Every person in the world! Every personon earth!
15. search() 方法定義和用法:用于檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串。
語法
stringObject.search(regexp)
參數(shù)??? 描述
Regexp:該參數(shù)可以是需要在 stringObject 中檢索的子串,也可以是需要檢索的 RegExp 對象。
注釋:要執(zhí)行忽略大小寫的檢索,請追加標志 i。
返回值:stringObject 中第一個與 regexp 相匹配的子串的起始位置。
注釋:如果沒有找到任何匹配的子串,則返回 -1。
說明:search() 方法不執(zhí)行全局匹配,它將忽略標志 g。它同時忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開始進行檢索,這意味著它總是返回stringObject 的第一個匹配的位置。
例1:在本例中,我們將檢索"W3School"
<scripttype="text/javascript">
var str="VisitW3School!"
document.write(str.search(/W3School/))
</script>
輸出:6
在下面的例子中,無法檢索到w3school(因為 search() 對大小寫敏感)。
<scripttype="text/javascript">
var str="VisitW3School!"
document.write(str.search(/w3school/))
</script>
輸出:-1
例2:在本例中,我們將執(zhí)行一次忽略大小寫的檢索
<scripttype="text/javascript">
var str="VisitW3School!"
document.write(str.search(/w3school/i))
</script>
輸出:6
16. match() 方法定義和用法:可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配。
該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
語法
stringObject.match(searchvalue)
stringObject.match(regexp)
參數(shù)???? 描述
searchvalue:必需。規(guī)定要檢索的字符串值。
regexp:必需。規(guī)定要匹配的模式的 RegExp 對象。如果該參數(shù)不是 RegExp 對象,則需要首先把它傳遞給 RegExp 構(gòu)造函數(shù),將其轉(zhuǎn)換為RegExp 對象。
返回值:存放匹配結(jié)果的數(shù)組。該數(shù)組的內(nèi)容依賴于 regexp 是否具有全局標志g。
說明:match() 方法將檢索字符串 stringObject,以找到一個或多個與 regexp 匹配的文本。這個方法的行為在很大程度上有賴于regexp 是否具有標志 g。
??
如果 regexp 沒有標志 g,那么 match() 方法就只能在stringObject 中執(zhí)行一次匹配。如果沒有找到任何匹配的文本, match() 將返回 null。否則,它將返回一個數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息。該數(shù)組的第0 個元素存放的是匹配文本,而其余的元素存放的是與正則表達式的子表達式匹配的文本。除了這些常規(guī)的數(shù)組元素之外,返回的數(shù)組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用。
?
如果 regexp 具有標志 g,則 match() 方法將執(zhí)行全局檢索,找到stringObject 中的所有匹配子字符串。若沒有找到任何匹配的子串,則返回 null。如果找到了一個或多個匹配子串,則返回一個數(shù)組。不過全局匹配返回的數(shù)組的內(nèi)容與前者大不相同,它的數(shù)組元素中存放的是stringObject 中所有的匹配子串,而且也沒有 index 屬性或 input 屬性。
?
注意:在全局檢索模式下,match() 即不提供與子表達式匹配的文本的信息,也不聲明每個匹配子串的位置。如果您需要這些全局檢索的信息,可以使用RegExp.exec()。
例2:使用全局匹配的正則表達式來檢索字符串中的所有數(shù)字
<scripttype="text/javascript">
var str="1 plus 2 equal3"
document.write(str.match(/\d+/g))
</script>
輸出:1,2,3