javascript
JavaScript(JS)中与正则表达式有关的方法介绍
文章目錄
- RegExp
- RegExp 對象的屬性
- compile
- test
- exec
- String
一共有 7 個與正則表達式式相關的方法,這些方法分別來自于 RegExp 與 String 對象。
RegExp
RegExp 對象表示正則表達式, 主要用于對字符串執行模式匹配.
語法: new RegExp(pattern[, flags])
參數 pattern 是一個字符串, 指定了正則表達式字符串或其他的正則表達式對象。
參數 flags 是一個可選的字符串,包含屬性 g、i 和 m,分別用于指定全局匹配、區分大小寫的匹配和多行匹配。如果 pattern 是正則表達式,而不是字符串,則必須省略該參數。
var pattern = "[0-9]"; // 構造正則表達式對象 var reg = new RegExp(pattern,"g"); var reg = new RegExp("[0-9]","g"); // 也可以直接輸入字面量 var reg = /[0-9]/g;RegExp 對象的屬性
包含如下屬性:
| global | 是否包含全局標志(true/false) |
| ignoreCase | 是否包含區分大小寫標志(true/false) |
| multiline | 是否包含多行標志(true/false) |
| source | 返回創建RegExp對象時指定的表達式文本字符串形式 |
| lastIndex | 表示原字符串中匹配的字符串最后一個字符后面的位置,默認為0 |
| flags(ES6) | 返回正則表達式的修飾符 |
| sticky(ES6) | 是否設置了y(粘連)修飾符(true/false) |
compile
compile 方法用于在執行過程中改變和重新編譯正則表達式。
語法:compile(pattern[, flags])
參數介紹請參考上述 RegExp 構造器,用法如下:
var reg = new RegExp("abc", "gi"); var reg2 = reg.compile("new abc", "g"); console.log(reg); // /new abc/g console.log(reg2); // undefined可見 compile 方法會改變原正則表達式對象,并重新編譯,而且它的返回值為空。
test
test 方法用于檢測一個字符串是否匹配某個正則規則,只要是字符串中含有與正則規則匹配的文本,該方法就返回 true,否則返回 false。
語法:test(string)
用法如下:
console.log(/[0-9]+/.test("abc123")); // true console.log(/[0-9]+/.test("abc")); // false以上,字符串”abc123” 包含數字,故 test 方法返回 true;而字符串”abc” 不包含數字,故返回 false。
實際上,如果正則表達式帶有全局標志(帶有參數 g)時,test 方法還受正則對象的 lastIndex 屬性影響,如下:
var reg = /[a-z]+/; // 正則不帶全局標志 console.log(reg.test("abc")); // true console.log(reg.test("de")); // true var reg = /[a-z]+/g; // 正則帶有全局標志g console.log(reg.test("abc")); // true,成功匹配到字符串 abc console.log(reg.lastIndex); // 3, 最近 1 次匹配到的字符串最后 1 個字符后面的位置。下次運行 test 時,正則引擎將從索引為 3 的位置開始查找 console.log(reg.test("de")); // false,reg 對象的屬性 lastIndex 的值為 3,所以只會從位置 3 開始嘗試匹配,而字符串“de”根本就沒有位置 3,所以直接匹配失敗exec
語法:exec(string)
exec() 方法的功能非常強大,它是一個通用的方法,而且使用起來也比 test() 方法以及支持正則表達式的 String 對象的方法更為復雜。
如果 exec() 找到了匹配的文本,則返回一個結果數組。否則,返回 null。此數組的第 0 個元素是與正則表達式相匹配的文本,第 1 個元素是與 RegExpObject 的第 1 個子表達式相匹配的文本(如果有的話),第 2 個元素是與 RegExpObject 的第 2 個子表達式相匹配的文本(如果有的話),以此類推。除了數組元素和 length 屬性之外,exec() 方法還返回兩個屬性。index 屬性聲明的是匹配文本的第一個字符的位置。input 屬性則存放的是被檢索的字符串 string。我們可以看得出,在調用非全局的 RegExp 對象的 exec() 方法時,返回的數組與調用方法 String.match() 返回的數組是相同的。
但是,當 RegExpObject 是一個全局正則表達式時,exec() 的行為就稍微復雜一些。它會在 RegExpObject 的 lastIndex 屬性指定的字符處開始檢索字符串 string。當 exec() 找到了與表達式相匹配的文本時,在匹配后,它將把 RegExpObject 的 lastIndex 屬性設置為匹配文本的最后一個字符的下一個位置。這就是說,您可以通過反復調用 exec() 方法來遍歷字符串中的所有匹配文本。當 exec() 再也找不到匹配的文本時,它將返回 null,并把 lastIndex 屬性重置為 0。
var reg = /([a-z]+)/gi,string = "World Internet Conference"; var array = reg.exec(string); console.log(array); // ["World", "World", index: 0, input: "World Internet Conference"] console.log(RegExp.$1); // World console.log(reg.lastIndex); // 5, 剛好等于 array.index + array[0].length如上代碼,可以看到 reg.lastIndex == array.index(匹配開始的位置)+ array[0].length(匹配字符串的長度)。
隨著檢索繼續, array.index 的值會變成下個匹配字符串的開始位置, 相應地 reg.lastIndex 的值會變成下個匹配字符串的結束位置。我們也可以通過反復調用 exec 方法來遍歷源字符串中所有的匹配字符串,直到 exec 方法再也匹配不到文本時,它將返回 null,并把 reg.lastIndex 屬性重置為 0。
array = reg.exec(string); console.log(array);//["Internet", "Internet", index: 6, input: "World Internet Conference"] console.log(reg.lastIndex);//14array = reg.exec(string); console.log(array);//["Conference", "Conference", index: 15, input: "World Internet Conference"] console.log(reg.lastIndex);//25array = reg.exec(string); console.log(array);//null console.log(reg.lastIndex);//0有的時候我們需要手動將 lastIndex 的值手動設置為 0,如下例子:
var reg = /[0-9]+/g,str1 = "123abc",str2 = "123456"; reg.exec(str1); console.log(reg.lastIndex);//3 var array = reg.exec(str2); console.log(array);//["456", index: 3, input: "123456"]以上代碼,正則式在匹配字符串 str2 時,期望的正確結果應該是“123456”,因此建議在第二次執行 exec 方法前,增加一句 reg.lastIndex = 0;。
String
match,search,replace,split 方法請參考字符串API。
總結
以上是生活随笔為你收集整理的JavaScript(JS)中与正则表达式有关的方法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果手机屏幕旋转在哪关闭
- 下一篇: JS(JavaScript) 使用捕获性