JaveScript 中的正則表示式
語法:
var expression = /pattern/flags ;
pattern: 任何簡單或複雜的正則表示式。
flags: 可以是 g,i,m 或它們的組合。
g:表示全域性模式,即模式將被應用於所有字串,而非在發現第一個匹配項時就立即停止。
i:表示不區分大小寫。
m:表示多行,及在到達一行文字末尾時還會繼續查詢下一行。
例子:
匹配字串中所有有"at"的例項
var pattern1=/at/g
模式中的所有元字元都必須轉義。
元字元: ({\^$|)?*+.]}
例子: 匹配所有“.at”, 不區分大小寫
var pattern2 = /\.at/gi
RegExp 例項方法:
exec() : 接受一個引數,即要應用模式的字串,然後返回包含第一個匹配項資訊的陣列,或者沒有匹配項的情況下返回null.返回的陣列雖然是Array 的例項,但包含兩個額外的屬性:index和input。其中index表示匹配項在字串中的位置,而input表示應用正則表示式的字串。
在陣列中,第一項是與整個模式匹配的字串。其它項是與模式中的捕獲組匹配的字串。如果沒有捕獲組,陣列只有一項。
例子:
var text =“mom and dad and body"
var parrern =/mom( and dad( and bady)?)?/gi
var matches = parrern.exec(text);
alert(matches.index); //0
alert(matches.input); //“mom and dad and body"
alert(matches[0]); //“mom and dad and body"
alert(matches[1]); //" and dad and bady"
alert(match[2]); //" and bady"
對於exec()方法而言,即使在模式中設定了全域性標誌(g),它每次也只會返回一個匹配項。在不設定全域性標誌的情況下,在同一字串上呼叫exec()將始終返回第一個匹配項的資訊。而設定全域性標誌情況下,每次呼叫exec()則會在字串中繼續查詢新的匹配項。
例子:
var text ="cat , bat, sat, fat";
var pattern1 =/.at/; //非全域性模式
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
var pattern2 =/.at/g; //全域性模式
var matches = pattern2.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern2.lastIndex); //3
matches = pattern2.exec(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern2.lastIndex); //8
正則表示式的第二個方法是 test(), 它接受一個字串引數,在模式與該引數匹配的情況下返回true;否則返回false. 在只想知道目標字串與模式是否匹配時很方便。
RegExp 建構函式屬性
RegExp 建構函式包含一些屬性,這些屬性適用於作用域中的所有正則表示式,並且基於所執行的最近一次正則表示式操作而變化。
屬性名 | 說明 |
input | 最近一次要匹配的字串 |
lastMatch | 最近一次的匹配項 |
lastParen | 最近一次匹配的捕獲組 |
leftContext | input字串中lastMatch之前的文字 |
multiline | 布林值,表示是否所有表示式都是多行模式 |
rightContext | input字串中lastMatch之後的文字 |
使用這些屬性可以從exec()或test()執行的操作中提取出更具體的資訊.
例子:
var text ="this has been a short summer";
var pattern = /(.)hort/g;
if(pattern.test(text)){
alert(RegExp.input); //this has been a short summer
alert(RegExp.leftContext); //this has been a
alert(RegExp.rightContext); //summer
alert(RegExp.lastMatch): //short
alert(RegExp.lastParen): //s
alert(RegExp.multiline): //false
}