javascript
JS中与正则相关的方法
前面有一篇文章大體介紹了一下JS中正則表達式,而使用正則表達式還需要配合JS中的相關方法,分別是String對象和RegExp對象的方法。今天就來具體介紹一下這些方法。
使用這則表達式的方法可以分為兩類,一個是String的幾個方法,還有一個就是RegExp對象自身的方法,分別有:
RegExp的方法有 exec test
String的方法有 match replace search split
這些方法中最復雜的就是exec這個方法,表面上和String的match方法很像但是不然。
正則的exec()與字符串的match()
當這個方發作用于非全局匹配的正則表達式的時候和String的match方法作用是一樣的,會返回一個數組數組的第一個元素是正則表達式的匹配結果,第二個元素是正則表達式第一個子表達式(分組,用小括號括起來的表達式)的匹配結果,以此類推。結果數組還有index屬性,input屬性和groups屬性,其中index表示的是匹配到的字符串第一個字符的index,input是執行匹配的字符串。以上這些屬性和String.match方法返回的都一樣。當匹配不到結果的時候兩個方法返回的都是null。
var a = /a(\w)/; var str = "cbacbab";str.match(a); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined]a.exec(str); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined]當匹配全局正則表達式的時候這兩個方法的表現則完全不同,match方法會一次返回所有的匹配結果并且不會有其它額外的信息,而exec則不同一次只會返回一個匹配的結果,但是結果中還會包含以上的信息。
exec在執行全局匹配的時候回從lastIndex開始匹配,匹配后會設置Regexp對象的lastIndex屬性為匹配到的字符最后一個字符的下一個位置,當匹配不到結果的時候就會重置lastIdex屬性值為0。
所以match在匹配全局正則表達式和非全局正則表達式的行為表現是不一樣的(JS中這樣的例子有很多,例如Array() 參數個數不一樣導致的結果也不一樣)。
var a = /a(\w)/g; var str = "cbacbab";str.match(a); // ["ac", "ab"]a.exec(str); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined],看第二個元素 'c' 這就是(\w)子表達式捕獲的字符串a.lastIndex; // 4a.exec(str); // ["ab", "b", index: 5, input: "cbacbab", groups: undefined]a.lastIndex; // 7 匹配結果后面沒有了所以重置為0a.exec(str); // nulla.lastIndex; // 0test()方法
reg.exec(b)返回一個boolean值表示在b中能否匹配到reg(正則表達式),與正則的exec方法一樣當正則為全局匹配的時候會根據屬性lastIndex來匹配,返回信息。
var reg = /a/;var a = 'edcba';var c = 'ddd';reg.test(a); // truereg.test(c); // false// 全局匹配的正則var regG = /a/g;var str = 'abcdabcd';regG.test(str); // trueregG.lastIndex; // 1regG.test(str); // true 這是從字符串位置1開始匹配的結果,并不是從新從字符串位置0開始匹配regG.lastIndex; // 5retG.test(str); // falseregG.lastIndex; // 0 沒有匹配的結果就重置了lastIndex為0replace()方法
這個方法可以捕獲分組,但是JS中的正則表達式并不能給分組命名,所以只能用分組的序號來捕獲分組。
var a = 'abcdefg';var reg = /c(de)/;a.replace(reg, '$1hhh'); // 這個$1就是捕獲了分組 (de) 所以結果是 abdehhhfgsearch()方法
在字符串a中搜尋字符串b,字符串b也可以是一個描述字符串的正則表達式。返回的是字符串b在a中的起始位置,如果搜索不到那么就會返回-1,和在數組中使用indexOf查找元素一樣找不到會返回-1。
var a = 'abcd';var reg = /b/;a.search(reg); // 1a.search('e'); // -1split()方法
a.split(b) 根據b分割a,返回一個數組。b可以是一個字符串也可以是一個描述字符串的正則表達式。
var a = 'ab cd ef';a.split(' '); // ["ab", "cd", "ef"]a.split(/\s+/); // ["ab", "cd", "ef"]總結
以上是生活随笔為你收集整理的JS中与正则相关的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见的CSS布局
- 下一篇: javascript中令人迷惑的this